你为什么要返回(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 指针。