如果这个问题很天真,请原谅。考虑以下程序:
#include <stdio.h>
int main() {
int i = 1;
i = i + 2;
5;
i;
printf("i: %d\n", i);
}
在上面的例子中,陈述5;和i;似乎完全是多余的,但如果没有默认警告或错误的代码编译(但是,GCC则会引发warning: statement with no effect [-Wunused-value]警告时RAN -Wall)。它们对程序的其余部分没有影响,那么为什么首先将它们视为有效的语句?编译器会简单地忽略它们吗?允许这样的陈述有什么好处?
;其后作为语句。这将使该语言复杂化,从而添加更多关于何时不能成为表达式的规则
printf()?该语句5;基本上说:“做什么5(什么都不做),然后忽略结果。您的语句printf(...)是“什么都不做printf(...),然后忽略结果(来自的返回值printf())。” C将它们视为相同。这也允许诸如(void) i;where i是您强制转换void为将其标记为故意未使用的函数的参数
printf()即使您忽略它最终返回的值,调用的确会起作用。相比之下,5;根本没有效果。