为什么putchar不需要标题?

时间:2014-05-20 08:04:03

标签: c

阅读this answer解释了Stack Overflow上未找到页面上的多语言程序我很惊讶地阅读了putchar was used because you don't need any #include to use it。虽然en.cppreference.com referencewww.cplusplus.com reference显示putchar标题中定义的stdio.h,但似乎是这种情况。

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

2 个答案:

答案 0 :(得分:4)

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

然后编译器假定该函数的返回类型为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'.