5

可能重复:
为什么#include <stdio.h>不需要使用 printf()?

//#include <stdio.h>
//#include <conio.h>

main(){

printf("Hi");
getch();

}

当我编写这个程序时,它让我震惊的是,它实际上没有导入任何包含 printf 函数的 c 库,例如 stdio。为什么呢?(使用 Dev-C++ 4.9.9.2,另存为 .c,而不是 .cpp)

4

2 回答 2

7

C 允许您在不首先定义原型的情况下调用函数。(C++ 不这样做。) 的隐式原型printf定义如下:

int printf();

巧合的是,这个隐式原型的调用约定printf与您平台上的实际调用约定相匹配。

一般来说,你不能指望这个工作,并且有很多情况下它不会工作。我建议启用编译器警告以检测隐式原型声明,以便您可以修复它们(通过包含正确的标头)。

脚注: #include不导入库,它只是在编译时将文件粘贴到您的源代码中。标<stdio.h>头包含(直接或间接)某些原型,但库必须单独链接。由于printf通常位于默认链接到程序的库中,因此您通常无需执行任何操作即可使用printf.

于 2012-06-22T06:03:55.300 回答
4

#include处理器指令不导入任何库;在C语言的定义中没有这样的导入概念。

您只是碰巧调用了一个名为的函数printf,而标准C库(例如libc.so在 Linux 上,我不知道 Windows 是如何调用它的)恰好在默认情况下被链接。由于您使用该库已知的名称调用函数,因此它会被链接,并在运行时被调用。

但是,您应该在编译器中启用所有警告,它会警告您调用未声明的函数。

于 2012-06-22T06:04:38.943 回答