【发布时间】:2012-06-27 22:48:12
【问题描述】:
在 C 中将void; 放在一行上有何作用?编译器对此发出警告,但我不明白。像这样将 void 放在一条线上有什么意义?
#include <stdio.h>
int main() {
void;
printf("word dude");
return 1;
}
嗯
$ gcc -pedantic -ansi -Wall -Wextra eh.c -o eh
eh.c: In function 'main':
eh.c:4:2: warning: useless type name in empty declaration
$ ./eh
word dude
人们似乎对我的问题感到困惑:这条线是什么意思,它有什么作用吗?为什么有效?
void;
删除了 void cast,因为它会引起不必要的讨论。
【问题讨论】:
-
编译器告诉你,你所做的没有用。那么这里的问题是什么?
-
真正的问题是:为什么这不是语法错误?
-
@Oil:问题是为什么编译,它是什么意思。
-
@megazord 看到我的回答,这不是 C。你的编译器很友好地接受它,但它没有义务接受。
clang比如拒绝翻译这个程序。 -
它编译是因为编译器没有强制执行严格的一致性。它接受空声明,尽管它会警告它们。要获得编译错误,请使用
-pedantic-errors或一般使用-Wall -Wextra -Werror。