两个文件:test.cpp test.h
我们命令行编译的指令是:g++ test.cpp -o test
但是这中间实际上经过了以下过程:
四步走:
1.预处理
命令:g++ -E test.cpp -o test.i
这部分操作:1.将宏定义展开,删除#define
2.将注释删除,用空格代替
3.处理条件编译 #ifdef #endif
4.处理头文件#include,将包含的头文件展开
5.处理#pragma指令
我们动手试一下在程序中包含上面这些,然后打开test.i,会发现它们都消失不见了,都按照上面的规则展开了
2.编译
g++ -S test.i -o test.s
生成的是汇编文件
这部分操作:1.编译器检查语法,语义分析
2.分析关键字,类型是否合法
3.分析表达式是否合法
3.汇编
指令:g++ -c test.s -o test.o
这部分操作:1.将汇编代码翻译为机器可执行的二进制文件
4.生成可执行程序
指令:g++ test.o -o test
这部分操作:1.将机器指令代码生成可以执行的文件
连起来就是1->2->3->4
g++帮助我们优化了,所以只需要g++ test.cpp -o test一条指令就可以实现上述操作
原文:https://www.cnblogs.com/zero-waring/p/12860219.html