你为什么要在这里增加?

时间:2015-01-05 15:18:01

标签: c unix return increment

该功能来自此处:http://v6shell.org/history/if.c

或使用语法 - 突出显示:http://pastebin.com/bj0Hvfrw

char *nxtarg() {

    if (ap>ac) return(0*ap++);
    return(av[ap++]);
}

这是返回下一个参数的函数。 ac是argv中的参数个数,ap是当前参数的索引。

所以我想我们正在测试if ( ap > ac ),如果有更多的参数。这是我的问题:

如果ap已经大于ac,为什么你会增加ap [return(0 * ap ++)],因此没有更多的参数?

我会回来(0)。 如果我回来(0)会有什么问题?你能举个例子吗?

请注意,这是旧的K& R-C。

1 个答案:

答案 0 :(得分:2)

文件中有几个地方看起来像这样:

if (eq(nxtarg(), "!"))
    return(!e3());
ap--;

的伪代码:

if nxtarg returns some string { do something }
else    // nxtarg returns 0 or another string
{
    // probably they want to test the same argument against another string
    ap--; 
}

为了实现这一点,他们在任何情况下都会增加ap

根据要求,这是nxtarg不会增加ap返回0的情况下的来电代码:

char* p = nxtarg();
if ( p != 0 ) 
{
    if (eq(p, "!")) return(!e3());
    ap--;
}
// p == 0 - don't decrement ap