本文共 1133 字,大约阅读时间需要 3 分钟。
转载自: https://www.jianshu.com/p/609ff54ec6a5
编译
进去,强调下是编译进去,不是执行
#define XXX 0 // 第一段条件编译 #ifdef XXX 逻辑1 #else 逻辑2 #endif // 第二段条件编译 #if XXX 逻辑1 #else 逻辑2 #endif
逻辑1
会被编译进去逻辑2
会被编译进去#if
既关心宏是否定义,又关心宏的逻辑的真假#ifdef(#if defined())、#ifndef(#if !defined())
仅仅关心宏是否被定义,不关心宏的逻辑真假#ifdef 宏 逻辑1 #else 逻辑2 #endif
#ifdef只关心
宏是否被定义
,不关心
宏逻辑的真假
#define 宏 1
和 #define 宏 0
等效,都等同于 #define 宏
#if 宏 逻辑1 #else 逻辑2 #endif
#if不仅关心
宏是否被定义
,而且关心
宏逻辑的真假
#if、#elif、#else、#endif
使用示例#if 条件1 代码段1#elif 条件2 代码段2...#elif 条件n 代码段n#else 代码段 n+1#endif
#ifdef、#ifndef、#else、#endif
使用示例// 如果定义了macro_name宏就编译代码段1#ifdef macro_name 代码段1#else 代码段2#endif// 等价于上面的条件编译指令,如果未定义macro_name宏,就编译代码段1#ifndef macro_name 代码段2#else 代码段1#endif
#if defined()
和 #ifdef
的比较#ifdef MACRO_1 #ifdef MACRO_2 代码段A #endif#endif// 等价于上面的条件编译指令#if defined(MACRO_1) && defined(MACRO_2) 代码段A#endif
#if !defined()
和 #ifndef
的使用同上是否被编译
#endif