假设我有这样的源代码:
#include <stdio.h>
FILE *p;
int main(void) {
p;
}
...将编译(使用gcc)而没有任何错误或警告-除非我打开-Wall
,在这种情况下,将输出statement with no effect
警告。
但是代码是否像这样:
#include <stdio.h>
int main(void) {
stderr;
}
...无论-Wall
,都不会显示警告。
我在这里想念东西吗?
gcc版本9.3.0
是的,如果你写类似的东西:
0;
或
"Hello world";
您将获得相同的结果。原因是语句可以是表达式(任何类型),后跟C中的分号;
。仅删除表达式值,然后继续执行下一条语句(在您的情况下没有)。在我的示例中,编译器只是删除了表达式的0值或字符串文字"Hello world"
,结果为空。