阅读this answer解释了Stack Overflow上未找到页面上的多语言程序我很惊讶地阅读了putchar was used because you don't need any #include to use it
。虽然en.cppreference.com reference和www.cplusplus.com reference显示putchar
标题中定义的stdio.h
,但似乎是这种情况。
如果C
没有声明,如何正确使用函数?或者putchar
内置于编译器中的内容(如sizeof
运算符)?
答案 0 :(得分:4)
在c中,您可以在没有声明的情况下使用任何函数。
然后编译器假定该函数的返回类型为int。参数传递给给定的函数。由于没有函数声明,如果参数正确,编译器无法验证。
putchar
未内置于编译器中。
但是,因为
函数调用putchar(c)应相当于putc(c,stdout)。
它可能被定义为宏,例如
#define putchar(c) putc(c, stdout)
在这种情况下,您必须包含stdio.h
才能获得putchar
的正确定义。
答案 1 :(得分:1)
有些编译器会做一些奇怪的,非标准的事情,例如自动包含各种常见标题。代码可能是在一个这样的编译器上编译的。
否则,在旧的过时C90标准中,您不需要显示函数原型:如果没有,编译器将开始假设返回类型为int。哪个没有任何意义。使用C99标准从C语言中删除了这种废话。
因此编译代码的原因是因为你使用了一个糟糕的编译器。无法保证代码将按预期编译/链接或工作。
例如:
int main ()
{
putchar('a');
}
这会使用gcc
以及gcc -std=c90
进行编译。但是如果你把它编译为标准C,
gcc -std=c99 -pedantic-errors
您将获得error: implicit declaration of function 'putchar'.