使用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
…
两点:首先,它可能(通常会)采用一组特定的标志来使编译器符合标准。
其次,标准所要求的只是实现在出现错误时发出“诊断” – 但是由实现来定义什么是或不是诊断。 可以自由地说“警告”是一种诊断,如果它想要的话。 发出诊断时,它可能会退出编译,或者无论如何都可以编译代码。
一句话:它正在做的事情可能足以符合,无论价值多少。