您好,欢迎来到知库网。
搜索
您的当前位置:首页#if 和 #ifdef的区别

#if 和 #ifdef的区别

来源:知库网

面试题

  • 猜一下哪段代码会被编译进去,强调下是编译进去,不是执行
  #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

参考链接

Copyright © 2019- zicool.com 版权所有 湘ICP备2023022495号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务