【问题标题】:Why would you increment here?你为什么要在这里增加?
【发布时间】:2015-01-05 15:18:01
【问题描述】:

函数来自这里: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。

【问题讨论】:

标签: c unix return increment


【解决方案1】:

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

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

【讨论】:

  • 如果我只用return(0)而不是return(0*ap++)会有什么问题?你有例子吗?
  • 在这种情况下ap的值会不同,当nextarg返回0或不返回时,调用者代码也应该不同。如果出现任何不希望的结果,他们希望减少 ap
  • 对!谢谢亚历克斯:)
猜你喜欢
  • 2018-01-27
  • 2012-06-03
  • 1970-01-01
  • 2021-08-27
  • 1970-01-01
  • 2018-10-03
  • 2010-12-15
  • 2019-01-16
  • 2021-10-22
相关资源
最近更新 更多