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