为什么putchar不需要标题?

阅读这个解释在Stack Overflow上找不到的页面上的多语言程序的答案我很惊讶地读到了putchar was used because you don't need any #include to use it 。 这似乎是这种情况,尽管en.cppreference.com参考和www.cplusplus.com参考显示了stdio.h头文件中定义的putchar

如果没有在C声明,如何正确使用函数? 或者是putchar内置于编译器中的内容(如sizeof运算符)?

在c中 ,您可以在没有声明的情况下使用任何函数。

然后编译器假定该函数的返回类型为int。 参数传递给给定的函数。 由于没有函数声明,编译器无法validation参数是否正确。

putchar没有内置到编译器中。 但是,自从

函数调用putchar(c)应该等同于putc(c,stdout)。

它可能被定义为一个宏,例如

 #define putchar(c) putc(c, stdout) 

在这种情况下,必须包含stdio.h才能获得putchar的正确定义。

有些编译器会做一些奇怪的,非标准的事情,例如自动包含各种常见标题。 代码可能是在一个这样的编译器上编译的。

否则,在旧的过时的C90标准中,您不需要看到函数原型:如果没有,编译器将开始假设返回类型为int。 这没有任何意义。 使用C99标准从C语言中删除了这种废话。

所以编译代码的原因是因为你使用了一个糟糕的编译器。 无法保证代码将按预期编译/链接或工作。

例如:

 int main () { putchar('a'); } 

这与gcc以及gcc -std=c90 。 但是如果你把它编译为标准C,

gcc -std=c99 -pedantic-errors

你会得到error: implicit declaration of function 'putchar'.