预处理中的头文件stdio.h在哪?里面有什么?

预处理中的头文件stdio.h在哪?里面有什么?

首先说声对不起,我不太会用Markdown编辑器,所以文章乱。

环境:linux操作系统 / X86-64和gcc编译器

================================================

前言:

以C/C++为例,编写好的源代码会包含一些预处理命令(#include和#define),需要经过预处理成为纯C/C++的文本(即以.i为后缀的文件)。

常见的预处理命名如下:

在这个过程中文件有什么变化?

#define 不用多说,宏定义,使得源代码更容易理解。

#include 则是关注的重点,它的目的就是把多个编译单元(也就是c或者cpp文件)公用的内容,单独放在一个文件里减少整体代码尺寸;或者提供跨工程公共代码。

================================================

#include 作为最常见的头文件,它在哪,它的里面有什么?接下来开始进入正题

在linux系统中编写一个简单的源程序命名为:a.c

使用命令:gcc -E -P a.c 查看不含调试信息的预处理结果。大概看一下预处理的结果。

================================================

接下来执行gcc -E a.c 即输出带调试信息的预处理结果【有点乱,但调试信息可以告诉我们内容来自哪里】可以看到,stdio.h 这个文件是在usr/include 路径下的。同时我看到还引入了其他的头文件,比如/usr/include/stdc-predef.h 、/usr/include/features.h、/usr/include/x86_64-linux-gnu/sys/cdefs.h等等。

================================================

按路径打开stdio.h 文件,看看预处理引入了头文件的哪些内容。

在我这个版本里(感觉和网上的不太一样)stdio.h里面还有预处理命令。

暂时认为:预处理根据头文件的预处理命令来把部分类型定义、全局变量及函数原型"复制"到源文件中。而不是直接全搬过去。

理由:

stdio.h里面有的数据类型,在预处理后的文件里不一定有。

相关推荐

1、推荐使用大白菜U盘启动盘制作工具。
怎样查看自己的WiFi密码?快速查找方法
射手座代表的花是什么?
鼠标丢帧是什么原因 5种原因及解决方法
心理学告诉你出轨的六种动机 已被科学验证
自己货车怎么找货源?货车司机找货源最好的平台
眼睛花是怎么回事

眼睛花是怎么回事

07-02 👁️ 3329
如何高效利用iCloud:新手小白的终极指南
如何在 iPhone 或 iPad 上释放储存空间