编译基本过程
源代码(main.c)->预处理器(cpp)->编译器(gcc/clang/msvc)->汇编器(as)->链接器(ld)->可执行文件(main.exe)
预处理器
C语言中预处理器:执行预处理命令(文件包含、宏替换、条件编译)+处理注释(将所有注释替换为空格)+处理续行符(将所有续行符的代码连接到上一行)+处理字符串连接(将用空格或换行分隔的字符串连接成一个字符串)
预处理命令:是以#开始的命令
预处理命令分类:
- 宏定义(#define…#undef…)(包括预定义的宏)
- 文件包含(#include…)
- 条件编译(#ifdef…#elif…#else…#endif…)(#ifndef…#elif…#else…#endif…)(#if…#elif…#else…#endif)
语法:#command name(…) token(s)
预处理运算符:
- defined:用于检查某个宏是否被定义,用于检查某个宏是否被定义,若被定义返回true,否则返回false。与条件编译指令#if…#elif…#else使用。
- #:用来将宏参数转换为字符串(字符串化操作)
- ##:用于在预处理时连接两个标识符