c - 你为什么要在这里增加?

标签 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)。 如果直接return(0)会有什么问题?能举个例子吗?

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

最佳答案

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

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

关于c - 你为什么要在这里增加?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27782451/

相关文章:

c - 错误 : #29: expected an expression in C

java - 构造函数实际上可以返回字符串吗?

c - C 中的行计数但排除空行

linux - 比较磁盘分区中的两个值,发送 80% 阈值的警报

linux - 使用execve的困难

macos - cd 到 bash 脚本中以波浪号 (~) 开头的文件夹名称

java - 遍历对象的ArrayList,并返回对象

c - 返回 ;这个语句返回什么?

c - 为什么 gdb 看不到 `stdio` 何时更改?

c - 如何为发布版本内联一个函数