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

How do you do logical exclusive XOR in the C preprocessor with defines

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

#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

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

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