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
。但在这里,对预处理器来说,对定义符号应用操作是没有意义的。此处的语法错误为“应为表达式”