1、预处理
#define
#ifdef
……
#endif
#include <>
宏定义、文件包含、条件编译等命令进行处理
代码优化,编译可执行文件变小,执行效率降低。
2、编译(翻译)
编译之前,C 语言编译器会进行词法分析、语法分析,接着会把源代码翻译成中间语言,即汇编语言。如果想看到这个中间结果,可以用 gcc -S
。需要提到的是,诸如 Shell 等解释语言也会经历一个词法分析和语法分析的阶段,不过之后并不会进行“翻译”,而是“解释”,边解释边执行。
把源代码翻译成汇编语言,实际上是编译的整个过程中的第一个阶段,之后的阶段和汇编语言的开发过程没有什么区别。这个阶段涉及到对源代码的词法分析、语法检查(通过 -std
指定遵循哪个标准),并根据优化(-O
)要求进行翻译成汇编语言的动作。
语法检查
如果仅仅希望进行语法检查,可以用 gcc
的 -fsyntax-only
选项;如果为了使代码有比较好的可移植性,避免使用 gcc
的一些扩展特性,可以结合 -std
和 -pedantic
(或者 -pedantic-erros
)选项让源代码遵循某个 C 语言标准的语法。这里演示一个简单的例子:
$ cat hello.c
#include <stdio.h>
int main()