use*_*797 5 c gcc implicit-int
为什么以下程序不会抛出错误:
dfljshfksdhfl;
#include <stdio.h>
int main () {
return 0;
}
Run Code Online (Sandbox Code Playgroud)
gcc 只会发出警告:
test.c:1:1:警告:数据定义没有类型或存储类[默认启用]
这是因为即使隐式int不再是C标准的一部分,因为C99一些编译器仍然支持它,主要是为了防止破坏很多旧代码.所以这一行:
dfljshfksdhfl;
Run Code Online (Sandbox Code Playgroud)
最终相当于:
int dfljshfksdhfl;
Run Code Online (Sandbox Code Playgroud)
clang 默认情况下为我们提供了更多信息警告:
warning: type specifier missing, defaults to 'int' [-Wimplicit-int]
dfljshfksdhfl;
^~~~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)
我们可以使用-pedantic-errors标志将其变成一个错误,虽然奇怪的是这不起作用clang,所以我们不得不诉诸-Werror并将所有警告变成错误,这实际上是一个很好的习惯.正如remyabel指出的那样,clang我们也可以使用-Werror=implicit-int.