转载自: 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
- 代码示例
#ifdef 宏
逻辑1
#else
逻辑2
#endif
#ifdef只关心宏是否被定义,不关心宏逻辑的真假- 举例:
#define 宏 1和#define 宏 0等效,都等同于#define 宏
#if
- 代码示例
#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
参考链接
作者:yanhooIT
链接:https://www.jianshu.com/p/609ff54ec6a5
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
C语言条件编译详解
本文详细解析了C语言中的条件编译指令,包括#if、#ifdef、#ifndef等的用法及区别,并通过示例代码说明如何正确使用这些指令来控制代码的编译过程。
3983

被折叠的 条评论
为什么被折叠?



