5

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

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

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

4

1 回答 1

7

是的,它确实。在范围内没有声明的是 UB。

J.2 未定义的行为

— 对于在使用函数原型定义函数的范围内调用没有函数原型的函数,原型以省略号结尾或提升后的参数类型与参数类型不兼容(6.5.2.2 )。

另外,请注意,在 C99 中,从 main 中脱离是可以的(即在语义上等同于 a return 0;)。对于 C99 之前兼容的编译器,您需要一个 return 语句,其中main 函数的返回类型是与int.

于 2010-08-20T04:21:09.603 回答