博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
#if 和 #ifdef的区别
阅读量:2396 次
发布时间:2019-05-10

本文共 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

  • 代码示例
#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
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
你可能感兴趣的文章
Netty——EventLoop和线程模型
查看>>
Camera 图像处理原理分析- 色彩篇 二
查看>>
Camera 图像处理原理分析- 色彩篇 三
查看>>
Camera 图像处理原理分析- 亮度及曝光控制
查看>>
Camera 图像处理原理分析- 抗噪 变焦 频闪 等
查看>>
c语言核心技术 二
查看>>
udev文件系统的使用和基本工作原理分析
查看>>
快速理解Docker - 容器级虚拟化解决方案
查看>>
Memcached 及 Redis 架构分析和比较
查看>>
Android Kernel Porting 的简单总结文档
查看>>
Tachyon架构分析和现存问题讨论
查看>>
spark internal - 作业调度
查看>>
ARM平台上蓝牙协议栈Bluez的移植使用和配置
查看>>
理解和使用Alsa的配置文件
查看>>
理解和使用Linux的硬件抽象层HAL
查看>>
用KFI和Graphviz跟踪/优化内核代码
查看>>
设置SourceInsight的condition解决代码语法解析错误的问题
查看>>
阿里软件SAAS分析笔记(转)
查看>>
SaaS大会 八百客引领SaaS新理念(转)
查看>>
saas简介(转)
查看>>