C编程指令#include <stdio.h> printf </stdio.h>

时间:2014-01-01 17:43:04

标签: c linker include c-preprocessor compiler-directives

我有一个简单的hello world程序。 第一行是#include <stdio.h>

我用谷歌搜索它,它基本上告诉预处理器定义输入/输出的函数。

第一个问题:
我读到该函数的实际代码首先编译为目标文件。因此,如果我说#include <foo.bar> 自动链接该目标文件?

第二个问题:
当我删除include时,程序仍然有效...我的意思是printf语句......为什么?

4 个答案:

答案 0 :(得分:5)

printf()位于标准C库中,链接器将标准库链接到您的程序。

因此,任何标准函数都不会出现任何链接问题。

如果使用#include<stdio.h>编译没有gcc的程序,您将收到警告。

答案 1 :(得分:2)

在一些没有包含标准库函数标头的旧编译器中,您的代码将无法编译。

在一些现代编译器中,标准库默认链接。

如果未包含任何所用库的标题,则会发出如下警告:

 [Warning] implicit declaration of function 'printf' [-Wimplicit-function-declaration]

对于非标准库功能,您必须将其与程序链接。不要忘记包含它的标题。

答案 2 :(得分:0)

因为默认情况下很少有编译器包含这些文件和库!

答案 3 :(得分:0)

printf函数在标准C库中定义,编译器会自动将其链接到您的程序,除非另有说明。头文件只有函数声明,因此删除include指令不会使函数不可用。