C语言条件编译(conditional compiling)命令指定预处理器依据特定的条件来判断保留或删除某段源代码。例如,可以使用条件编译让源代码适用于不同的目标系统,而不需要管理该源代码的各种不同版本。
条件编译区域以 #if、#ifdef 或 #ifndef 等命令作为开头,以 #endif 命令结尾。条件编译区域可以有任意数量的 #elif 命令,但最多一个 #else 命令。
预编译指令1:#if,#elif,#else,#endif
#if 常量表达式1
// ... codes 1
#elif 常量表达式2
// ... codes 2
#elif 常量表达式3
// ...
#else
// ... statement
#endif
常量表达式可以是包含宏、算术运算、逻辑运算等等的合法C常量表达式。预处理器会依次计算条件表达式,直到发现结果非 0(也就是 true)的条件表达式。预处理器会保留对应组内的源代码。如果找不到值为 true 的表达式,并且该条件式编译区域中包含 #else 命令,则保留 #else 命令组内的代码。在预处理阶段结束时,没有被预处理器保留的代码会从程序中全部删除,不参与编译。
预编译指令2:#ifdef,#ifndef,#elif,#else,#endif
条件编译中相对常用的预编译指令
#ifdef HDL_XXX
// ... codes while definded HDL_XXX
#elif (HDL_XXX_ENALBE == HDL_ON)
// ... codes while HDL_XXX_ENALBE == HDL_ON
#else
// ... remained cases
#endif // #ifdef HDL_XXX
预编译指令3:#if defined,#if !defined
可用于在一条判断语句中声明多个判别条件;#ifdef和#ifndef则仅支持判断一个宏是否定义。如果是判断单个条件,#if defined和#ifdef没有差别。