Cor*_*lks 3 c c89 language-lawyer
考虑这个C程序:
int main()
{
puts("Hello world!");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译并运行正常,据我所知,是合法的C89.但是,我不是百分百肯定的.使用clang在C99模式下编译告诉我implicit declaration of function 'puts' is invalid in C99(这使我认为C标准必须在C99中更改以使隐式函数声明非法,这是我正在尝试确认的).
隐含功能声明在C89中是合法的吗?(即使这样做是个坏主意(除非你在混淆的C代码挑战中))
隐含功能声明在C89中是合法的吗?
是.从第3.3.2.2节开始:
如果函数调用中括号参数列表之前的表达式仅包含标识符,并且如果此标识符没有可见的声明,则隐式声明标识符,就像在包含函数调用的最内层块中的声明一样
Run Code Online (Sandbox Code Playgroud)extern int identifier();出现了.