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

C++ 如何使用defines在C预处理器中执行逻辑异或,c++,c,preprocessor,C++,C,Preprocessor,确保只定义两个名称中的一个的最简单方法是什么,例如: #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_O

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

#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 0
1 1
将抛出错误,而
0 1
1 0
是允许的

#if defined(USE_OPTION1) == defined(USE_OPTION2)
#error "You must use at least one option, but not both"
#endif
你能用
吗!((使用选项1)^(使用选项2))?
!(使用选项1)!=!(使用选项2)
?@CEPB如果是
,则定义使用选项1 true
。但在这里,对预处理器来说,对定义符号应用操作是没有意义的。此处的语法错误为“应为表达式”