c - 使用 printf 函数而不实际导入 stdio.h 并且它有效?!为什么呢?

标签 c

这个问题在这里已经有了答案:




9年前关闭。




Possible Duplicate:
Why #include <stdio.h> is not required to use printf()?


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

main(){

printf("Hi");
getch();

}

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

最佳答案

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

int printf();

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

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

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

关于c - 使用 printf 函数而不实际导入 stdio.h 并且它有效?!为什么呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11150883/

相关文章:

c - 存储在二进制文件中的 int 的 fread() 失败,段错误

c - 2D 指针到 2D 指针

c++ - c 中的 pow() 函数给我带来错误的结果

c - 如何编写没有 'main'的C程序?

c - 遍历数组元素会在数组计数器的最后一个值上产生奇怪的值

C语言括号

c++ - 循环中 << 和 * 哪个运算符运行得更快?

c - 在内存中分配的修改后的结构在函数结束后不保留值

c - 为什么我的程序不使用以下凭据打印 empid?

c - 如何将一个定点数除以一个小的 float ?