本文共 560 字,大约阅读时间需要 1 分钟。
GCC编译链接分为4步: 预处理(Prepressing), 编译(Compilation), 汇编(Assembly)和链接(Linking)
就是把源文件*.cpp 和相关的头文件 *.h等被预编译器 cpp 编译成一个 *.i 的文件。
例如: gcc -E hello.c -o hello.i 或者 cpp hello.c > hello.i (cpp 和 gcc -E 功能相似)
预编译器主要处理源代码中的以 “#” 开始的预编译指令, 规则如下:
- 将所有的 #define 删除,并且展开所有的宏定义
- 处理所有的条件编译指令,比如 “#if", "#ifdef", "#endif", "#else", "#elseif"
- 处理 ”#include" 预编译指令,将被包含的文件插入到该指令的位置。 这个过程是递归进行的,也就是说被包含的文件可能还包含其他的文件。
- 删除所有的注释 // 和 /* */
- 添加行号和文件名标识,比如 #2 “hello.c" 2 , 以便于编译时编译器产生调试用的行号信息及用户编译时产生的编译错误或者警告时能显示行号。
- 保留所有的 #pragma编译器指令,因为编译器需要使用它们
未完,待续。