你如何在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