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