我们应该知道,一个.c文件经过编译链接过程会变成.exe文件(windows下)和.out文件(Linux下)的可执行文件。
我认为掌握编译链接原理对程序员来说很是重要。
首先,这样一个过程可以大致分为两个过程,即编译和链接过程。
对于编译过程又可以细分为预编译,编译,汇编三个过程。
一.预编译
预编译过程主要处理那些源代码文件中以“#”开头的预编译指令,比如:头文件“#include”,宏定义“define”。。
主要处理规则如下:
- 将所有的“#define”删除,并且展开所有的宏定义。
- 处理所有条件编译指令,比如:“#if”,“ifdef”。。
- 处理“#include”预编译指令,将被包含的文件插入到该预编译指令的位置。
- 把所有注释用空格替换。
- 添加行号和文件名标识。
- 保留所有的#pragma编译器指令。
在预编译完成之后我们可以得到的是一个.i文件。
在linux中,预编译.i文件的获取可以用 gcc -E main.c -o main.i 命令获得。
这时候如果你打开了main.i文件,你会发现前面好几百行我们并不认识的乱码,而我们的程序只在最后出现占一点点。