预编译:
将所有"#define"删除,并且展开所有宏定义。
处理所有条件预编译指令,比如"#if"、"#ifdef"、"#elif"、"#else"、"#endif".
处理"include"预编译指令,将被包含的文件插入到改预编译指令的位置。注意,这个
过程是递归进行的,也就是说被包含的文件可能还包含其他文件。
删除所有的注释。
添加行号和文件名标识,比如#2 "hello.c" 2,以便于编译时编译器产生调试用的行号
信息及用于编译时产生编译错误或警告时显示行号。
保留所有的#pragma编译器指令,因为编译器需要使用它们。
编译:
编译过程就是把预处理完的文件进行一系列词法分析、语法分析、语义分析及优化后产生相应的汇编代码文件。
将所有"#define"删除,并且展开所有宏定义。
处理所有条件预编译指令,比如"#if"、"#ifdef"、"#elif"、"#else"、"#endif".
处理"include"预编译指令,将被包含的文件插入到改预编译指令的位置。注意,这个
过程是递归进行的,也就是说被包含的文件可能还包含其他文件。
删除所有的注释。
添加行号和文件名标识,比如#2 "hello.c" 2,以便于编译时编译器产生调试用的行号
信息及用于编译时产生编译错误或警告时显示行号。
保留所有的#pragma编译器指令,因为编译器需要使用它们。
编译:
编译过程就是把预处理完的文件进行一系列词法分析、语法分析、语义分析及优化后产生相应的汇编代码文件。