#include <stdio.h>在ac程序中真的做了什么

yay*_*zis 20 c stdio include

我是c编程的新手,我编写了一些简单的程序"Hello world"风格.

在所有这些程序中,我放在#include<stdio.h>顶部,但我不确定这究竟是什么意思.我用谷歌搜索它,我发现stdio.h是一个具有预处理器命令的文件,但什么是预处理器?我想当我编写代码时,我编译它并且我的代码转换为"计算机"可以读取的形式然后我可以运行它.有人可以向我解释这个命令的用法是什么吗?

小智 32

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

  • @Nat95:不,printf函数的代码不在stdio.h中,只是函数定义。链接器稍后在链接到标准库时解决此问题。您完全可以编写自己的 printf 函数。 (4认同)
  • 要查看将粘贴在实际代码上方的头文件的内容,请使用 `-E` 选项编译源代码,您将能够看到特定头文件包含的函数原型。@Lucas:一个错字是函数原型或声明而不是函数定义。 (2认同)

fkl*_*fkl 10

最简单的解释可能是您的程序调用或使用许多函数,其代码不是程序本身的一部分.例如,如果您在代码中编写"printf"来打印某些内容,则编译器不知道如何处理该调用.

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

更新:

而是printf函数的原型(名称,返回类型和参数)驻留在stdio.h中.这是编译阶段所需的全部内容.printf的实际代码包含在编译后的链接阶段.

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

更新2:

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

#include <stdio.h>
Run Code Online (Sandbox Code Playgroud)

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

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

#include "stdio.h"
Run Code Online (Sandbox Code Playgroud)

以下说明了它,并且所有平台上的行为都是可移植的.