//#include <stdio.h>
//#include <conio.h>
main(){
printf("Hi");
getch();
}
当我编写这个程序时,它让我震惊的是,它实际上没有导入任何包含 printf 函数的 c 库,例如 stdio。为什么呢?(使用 Dev-C++ 4.9.9.2,另存为 .c,而不是 .cpp)
//#include <stdio.h>
//#include <conio.h>
main(){
printf("Hi");
getch();
}
当我编写这个程序时,它让我震惊的是,它实际上没有导入任何包含 printf 函数的 c 库,例如 stdio。为什么呢?(使用 Dev-C++ 4.9.9.2,另存为 .c,而不是 .cpp)
C 允许您在不首先定义原型的情况下调用函数。(C++ 不这样做。) 的隐式原型printf
定义如下:
int printf();
巧合的是,这个隐式原型的调用约定printf
与您平台上的实际调用约定相匹配。
一般来说,你不能指望这个工作,并且有很多情况下它不会工作。我建议启用编译器警告以检测隐式原型声明,以便您可以修复它们(通过包含正确的标头)。
脚注: #include
不导入库,它只是在编译时将文件粘贴到您的源代码中。标<stdio.h>
头包含(直接或间接)某些原型,但库必须单独链接。由于printf
通常位于默认链接到程序的库中,因此您通常无需执行任何操作即可使用printf
.
预#include
处理器指令不导入任何库;在C语言的定义中没有这样的导入概念。
您只是碰巧调用了一个名为的函数printf
,而标准C库(例如libc.so
在 Linux 上,我不知道 Windows 是如何调用它的)恰好在默认情况下被链接。由于您使用该库已知的名称调用函数,因此它会被链接,并在运行时被调用。
但是,您应该在编译器中启用所有警告,它会警告您调用未声明的函数。