C中的隐含声明

时间:2010-08-20 04:17:15

标签: c c99 undefined-behavior language-lawyer implicit-declaration

以下程序是否在C中调用Undefined Behaviour

int main()
{
    printf("Printf asking: Where is my declaration ?");
}

在上面的程序中有一个printf()的隐式声明,上面的代码完全符合标准,还是只有一些特定于实现的行为?

1 个答案:

答案 0 :(得分:7)

是的。 UB没有声明范围。

  

J.2未定义的行为

     

- 用于调用没有的函数   功能原型的范围在哪里   函数是用函数定义的   原型,原型结束   省略号或类型   促销后的参数不是   兼容的类型   参数(6.5.2.2)。

另外,请注意在C99中掉落main是正常的(即在语义上等同于return 0;)。对于符合C99前的编译器,您需要一个return语句,其中主函数的返回类型是与int 兼容的类型。