使用gcc编译器隐式int和隐式声明函数

我读了c99标准:

-remove implicit function declaration, -remove implicit int. 

但是当我尝试使用-pedantic在c99模式下使用gcc编译器编译此代码时

 main(void){ f(3); return 0; } int f(int a){ .... } 

我期待2个错误,但我只收到2个警告:

 -warning: return type defaults to 'int' -warning: implicit declaration of function 'f'. 

它们不应该是c99中的错误吗?

http://gcc.gnu.org/c99status.html在这两种情况下都写有“完成”。

谢谢。

C标准要求对包含违反语法规则或约束的任何翻译单元进行诊断 。 它不要求这种诊断致命; 编译器可以继续处理源文件。 生成的可执行文件的行为(如果有)未定义。 该标准不区分警告和致命错误。

(唯一需要编译器拒绝源文件的是#error指令。)

结论:编译C时,要非常严肃地对待警告。

我不相信编译器需要产生致命错误。 如果你担心,请使用-Werror

两点:首先,它可能(通常会)采用一组特定的标志来使编译器符合标准。

其次,标准所要求的只是实现在出现错误时发出“诊断” – 但是由实现来定义什么是或不是诊断。 可以自由地说“警告”是一种诊断,如果它想要的话。 发出诊断时,它可能会退出编译,或者无论如何都可以编译代码。

一句话:它正在做的事情可能足以符合,无论价值多少。