【问题标题】:Using logical operators with macros将逻辑运算符与宏一起使用
【发布时间】:2012-11-22 14:35:35
【问题描述】:

如果定义了两个宏中的任何一个,我想要包含一段代码

#ifdef MACRO1 || MACRO2

void foo()
{


}

#endif

如何在 C 中实现这一点?

【问题讨论】:

    标签: c macros conditional-compilation


    【解决方案1】:

    除了#ifdef,预处理器还支持更通用的#if指令;实际上,#ifdef MACRO#if defined(MACRO) 的快捷方式,其中defined 是“预处理器函数”,如果定义了宏,则返回1;所以,你可以这样做:

    #if defined(MACRO1) || defined(MACRO2)
    
    void foo()
    {
    
    
    }
    
    #endif
    

    【讨论】:

    • 下面的代码有什么问题?如果这种用法不正确,还有什么替代方法? #define CUSTOM_METHOD 1 #define ARDUINO_METHOD 2 #define TIMER_DELAY_METHOD CUSTOM_METHOD #如果定义(TIMER_DELAY_METHOD != CUSTOM_METHOD)|| defined(TIMER_DELAY_METHOD!=ARDUINO_METHOD) #error "没有定义定时器方法" #endif // 定义
    • 我想我明白了,以下代码似乎正在运行 #define CUSTOM_METHOD 1 #define ARDUINO_METHOD 2 #define NONE 3 #define TIMER_DELAY_METHOD NONE #if (TIMER_DELAY_METHOD != CUSTOM_METHOD) && (TIMER_DELAY_METHOD != ARDUINO_METHOD ) #error "没有定义定时器方法" #endif // 定义
    【解决方案2】:
    #if defined(MACRO1) || defined(MACRO2)
    

    【讨论】:

      【解决方案3】:

      如果需要,这里是 NOT 版本:

      #if !defined(MACRO1) && !defined(MACRO2)
      ...
      #endif
      

      【讨论】:

        【解决方案4】:
          #if defined(Macro 1) + defined(Macro 2) == 1
          <Code>
          #endif  
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-05-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-07-07
          • 1970-01-01
          相关资源
          最近更新 更多