这是K&R-C,这里是整个代码:http://v6shell.org/history/if.c
看看这个功能:
char *nxtarg() {
if (ap>ac) return(0*ap++);
return(av[ap++]);
}
Run Code Online (Sandbox Code Playgroud)
1.问题:
为什么要返回(0*ap ++)?好的,你想要返回0并将ap增加1.但为什么会这样?比它快if (ap>ac) {ap++; return 0;}吗?
2.Question:nxtarg的返回类型必须是char*,为什么你能返回0,一个整数?
这是一个将增量压缩到返回零的语句的小技巧.它在逻辑上等同于条件
if (ap > ac) {
ap++;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
使用逗号运算符甚至更好:
return (ap++, (char *)0); // Thanks, Jonathan Leffler
Run Code Online (Sandbox Code Playgroud)
请注意,由于示例中的零不是编译时常量,因此表达式需要强制转换才能符合标准:
if (ap>ac) return (char*)(0*ap++);
Run Code Online (Sandbox Code Playgroud)
就返回整数零而言,NULL当在指针上下文中使用时,它被认为等于指针.