如果这个问题比较幼稚,请原谅。考虑下面的程序:
#include <stdio.h>
int main() {
int i = 1;
i = i + 2;
5;
i;
printf("i: %d\n", i);
}
在上面的例子中,语句 5;
和 i;
看起来完全是多余的,然而代码默认情况下可以编译通过(然而,gcc 在使用 -Wall
运行时会抛出一个 warning: statement with no effect [-Wunused-value]
警告)。它们对程序的其余部分没有任何影响,那么为什么它们被认为是有效的语句呢?编译器是否会简单地忽略它们?允许这样的语句有什么好处吗?
;
来成为语句。增加更多关于表达式不能成为语句的规则会使语言变得复杂。 - M.Mprintf()
的返回值而导致代码无法编译吗?语句5;
基本上是说“执行5
而忽略结果”。你的语句printf(...)
是“执行printf(...)
并忽略结果(从printf()
返回的值)”。C把它们视为相同的。这也允许出现像(void) i;
这样的代码,其中i
是传递给函数的参数,你将其强制转换为void
以标记它为有意未使用。 - Andrew Henleprintf()
确实有影响,即使您忽略了最终返回的值。相比之下,5;
根本没有任何影响。 - Nate Eldredge