cpp learning

C++ 从文本文件到可执行文件需要两个最主要的过程,分别是编译和链接,那编译过程是怎么样的,中间要经过哪些步骤?

预处理

首先会进行预处理操作,那什么是预处理操作呢。

#include <iostream>
#define INTEGER int
#if 1
Log();
#endif

如上,这些 # 开头的语句都是预处理命令,预处理操作就是处理这些语句的。

include 是将文本文件的内容全部拷贝过来。

define 是将所有 INTEGER 替换成 int ,也就是简单的替换功能

if 语句是真的话将包含的内容(也就是 Log())保留下来。

简单来说,预处理就是源文件的宏展开。

编译

每一个源文件都是一个编译单元,编译器对代码进行语义分析,进行翻译然后汇编生成 .o 目标文件,每一个源文件在编译过程中都是相互独立的。目标文件虽然是二进制文件,但是不一定能执行,因为不是每一个目标文件都有 main 函数。当编译器将一个工程里的所有源文件以分离的方式编译完毕后,再由链接器进行链接成为一个可执行文件或库文件。

目标文件是编译后生成的文件,以机器码的形式包含了编译单元里所有的函数和数据、导出符号表、未解决符号表、地址重定向表等。

Dev 软件的语言标准设置

Dev-c++ 是一款在 windows 下运行的 C++ 编程软件,默认支持 ISO C++ ,若想让其支持 C++ 11 。如下:

工具→编译器选项→代码生成/优化→代码生成→语言标准 -std → ISO C++ 11 。

ISO 是 International Organization for Standardization 的缩写 。