5-1 文件包含

1. C语言的编译过程

        1)源代码 ----》 预处理器 ----》 宏替换后的源代码,这一部分是预处理器处理宏,将所有宏定义的变量替换为值。例如宏定义 COLOR_RED 为 #FF0000,在这一步中相当于将 COLOR_RED 替换为 #FF0000。
        2)宏替换后的源代码 ----》 编译器 ----》中间文件,这一部分是将函数等模块进行编译,但并没有分配函数执行的实际地址,程序还不能执行。
        3)中间文件 ----》链接器 ----》可执行程序,这一部分是链接器将编译好的模块与实际使用的地址进行链接,程序转为可执行状态。

2. 头文件

        头文件中(.h 文件)存储了大量的函数声明。引入头文件实际上就是在进行函数声明。如果把所要使用的函数声明单独拿出,不再引入头文件也可。例如将 puts() 的函数声明拿出,不引用#include <stdio.h>.

int __cdecl puts(char const* _Buffer); // 不调用头文件的情况下,使用puts函数

int main(void){
    puts("hello world!"); // hello world 可正常打印出来
    return 0;
}

3. 头文件展开

        头文件展开实际上就是将头文件中所有的函数声明取出,放到 main() 函数上面。但头文件内部可能还会包含其他头文件,所以头文件展开是一个递归的过程。        

        头文件展开的具体操作需借助 gcc 编译器完成。例如展开 file_include.c 文件下的头文件 #include <stdio.h> (若 stdio.h 文件中含有其他头文件,也会被全部展开):

        在 terminal窗口下,输入 gcc -E .\file_include.c -o file_include.i,会在当前路径下生成 file_include.i 文件,该文件即为头文件展开后的文件。可将文件重命名为 file_include.i.c 后运行,与 file_include.c 运行结果相同( file_include.i.c 需使用 msvc 编译器编译,否则会报错,原因目前未知)。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值