@songying
2019-02-15T16:45:29.000000Z
字数 837
阅读 1171
c++
源代码编译成目标文件分为四个步骤: 预处理,编译,汇编,链接。
.c
的,gcc将它当做c程序,g++当做是c++程序。.cpp
的,两者都会认为是c++程序__cplusplus
宏标志着编译器将会把代码按c或c++语法来解释。预处理的第一步是将源代码文件.cpp
与相关头文件预处理为 .i
文件。
g++ -E helloworld.cpp -o helloworld.i
在预处理过程中主要是处理以#
开始的预编译指令。
#define
删除,并展开所有宏定义; #undef
取消某个宏的定义,使得后续该宏不再展开#if, #ifdef, #elif, #else, #endif
。 预编译程序根据这些指令,将那些不必要的代码过滤掉#include
, 将被包含的文件插入到该预编译指令的位置。当无法判断宏定义是否正确或头文件包含是否正确时,可以查看预处理后的文件来确定问题。
高级语言 -- 汇编语言
编译过程就是把预处理完的文件进行一系列的词法分析、语法分析、语义分析以及优化后产生相应的汇编代码文件。
g++ -s helloworld .i -o helloworld.s
编译过程分为6步: 扫描(词法分析), 语法分析,语义分析,源代码优化,代码生成和目标代码优化。
链接是将编译后得到的各个模块组装起来,其主要内容是将各个模块之间相互引用的部分处理好,使得各个模块能够正确的链接。