流程概括
一个程序想要执行起来,并不是一蹴而就的,必须经过预处理,编译,汇编,链接。了解这些较为底层的知识,可以帮助我们避开其中的一些“坑”。
流程分为四步:
-
预处理:展开头文件/宏替换/去掉注释/条件编译 (test.i main .i)
-
编译:检查语法,生成汇编 ( test.s main .s)
-
汇编:汇编代码转换机器码 (test.o main.o)
-
链接:链接到一起生成可执行程序 (a.out)
预处理
-
展开头文件
在写有#include 或#include "filename"的文件中,将文件filename展开,通俗来说就是将fiename文件中的代码写入到当前文件中; -
宏替换
将定义宏展开 -
去掉注释
略 -
条件编译
条件编译指令将决定哪些代码被编译,而哪些是不被编译的。可以根据表达式的值或者某个特定的宏是否被定义来确定编译条件。比如#pragma头文件只被包含一次
编译
编译是读取源程序(字符流),对之进行词法、语法和语义的分析,<