你如何在C预处理器中使用定义进行逻辑异或异或

确保仅定义两个名称之一的最简单方法是什么,例如:

#define USE_OPTION1
#define USE_OPTION2

#if not(USE_OPTION1 ^ USE_OPTION2)
#error "You must use at least one option, but not both"
#endif

我知道 C 或 C++ 中没有逻辑异或,那么最好的方法是什么?不一定是这样,是吗:

#define USE_OPTION1
#define USE_OPTION2
        
#ifdef USE_OPTION1
  #ifdef USE_OPTION2
  #error "You can't use both"
  #endif
#endif

#ifdef USE_OPTION2
  #ifdef USE_OPTION1
  #error "You can't use both"
  #endif
#endif

#ifndef USE_OPTION1
  #ifndef USE_OPTION2
  #error "You must use at least one"
  #endif
#endif

回答

您可以通过检查两者的定义是否相同来解决此问题。so 0 0and1 1会抛出错误,而0 1and1 0是允许的。

#if defined(USE_OPTION1) == defined(USE_OPTION2)
#error "You must use at least one option, but not both"
#endif


以上是你如何在C预处理器中使用定义进行逻辑异或异或的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>