使用printf函数而不实际导入stdio.h并且它有效吗?!为什么会这样?

Xeg*_*ara 3 c

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

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

main(){

printf("Hi");
getch();

}
Run Code Online (Sandbox Code Playgroud)

当我编程这个时,它震惊了我,它没有实际导入任何包含printf函数的stdio等c库.为什么会这样?(使用Dev-C++ 4.9.9.2,保存为.c,而不是.cpp)

Die*_*Epp 7

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

int printf();
Run Code Online (Sandbox Code Playgroud)

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

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

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