2

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

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

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

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

4

4 回答 4

5

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

所以任何标准函数都不会有任何链接问题。

如果您在不#include<stdio.h>使用的情况下编译程序,gcc您将收到警告。

于 2014-01-01T17:46:22.080 回答
2

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

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

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

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

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

于 2014-01-01T17:59:39.860 回答
0

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

于 2014-01-01T17:46:26.670 回答
0

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

于 2014-01-01T17:46:38.130 回答