22

我是 c 编程的新手,我正在编写一些简单的程序“Hello world”风格。

在所有这些程序中,我都放在首位#include<stdio.h>,但我不确定这到底意味着什么。我用谷歌搜索,发现 stdio.h 是一个包含预处理器命令的文件,但什么是预处理器?我想当我编写代码时,我编译它,我的代码转换为“计算机”可以读取的形式,然后我可以运行它。有人可以向我解释这个命令的用途是什么吗?

4

4 回答 4

38

它查找stdio.h文件并有效地将其复制粘贴到此#include语句的位置。该文件包含函数的所谓函数原型,例如printf(), scanf(), ... 以便编译器知道它们的参数和返回值是什么。

于 2013-09-30T07:08:00.383 回答
14

最简单的解释可能应该是您的程序调用或使用了许多代码不属于您的程序本身的函数。例如,如果您在代码中编写“printf”来打印某些内容,编译器不知道如何处理该调用。

stdio.h 是该 printf 信息所在的位置。

更新:

而 printf 函数的原型(名称、返回类型和参数)驻留在 stdio.h 中。这在编译阶段都是必需的。printf 的实际代码包含在编译之后的链接阶段。

include 语句基本上在实际编译之前插入所有函数原型。因此名称预处理器。

更新 2:

由于问题集中在 include 语句上(并且 OP 还询问了关于自己编写函数定义的问题,另一个重要方面是它是否写得像(注意尖括号)

#include <stdio.h>

预处理器假定它是一个标准库头文件,并首先在安装了编译器的系统文件夹中查找。

如果程序员自己定义一个函数并将 .h 文件放在当前工作目录中,他会使用(注意双引号)

#include "stdio.h"

以下说明了它,并且该行为可在所有平台上移植。

于 2013-09-30T07:07:53.587 回答
1

它告诉编译器使用文件 sdtio.h 中的函数、结构、宏等,该文件代表 glibc 的一部分(或您获得的任何标准 C 库)。编译器还将记录添加到输出可执行文件“链接列表”,它应该链接到标准 C 库。

于 2013-09-30T08:09:45.677 回答
1

源代码中的预处理器指令是在程序编译之前处理的语句,在此步骤之后,源代码被转换为扩展源代码,因为它现在包含对标准 C 库中已经定义的函数的引用(或任何其他),如 printf、scanf、putw、getchar 等。stdio.h 是一个带有“.h”扩展名的文件,其中包含 c 中使用的标准输入输出函数的原型(不是定义)。

于 2018-09-02T16:14:05.230 回答