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

时间:2012-06-23 16:25:07

标签: c c99

我在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 在这两种情况下都写有“完成”。

感谢。

3 个答案:

答案 0 :(得分:7)

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

要求编译器拒绝源文件的唯一事情是#error指令。)

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

答案 1 :(得分:4)

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

答案 2 :(得分:4)

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

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

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