编译流程图
编译过程
1.预处理(Preprocessing),
2.编译(Compilation),
3.汇编(Assemble),
4.链接(Linking)。
如下简单入门程序:
// hello.c
#include <stdio.h>
int main()
{
printf("hello world!\n");
}
通过gcc编译
$ gcc hello.c # 编译
$ ./a.out # 执行
hello world!
预处理
第一个阶段是预处理阶段,在正式的编译阶段之前进行。预处理阶段将根据已放置在文件中的预处理指令来修改源文件的内容。
1) 宏定义指令,如# define Name TokenString,# undef等。
对于前一个伪指令,预编译所要做的是将程序中的所有Name用TokenString替换,但作为字符串常量的 Name则不被替换。对于后者,则将取消对某个宏的定义,使以后该串的出现不再被替换。
2) 条件编译指令,如# ifdef,# ifndef,# else,# elif,# endif等。
这些伪指令的引入使得程序员可以通过定义不同的宏来决定编译程序对哪些代码进行处理。预编译程序将根据有关的文件,将那些不必要的代码