你如何在 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 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
确保只定义两个名称之一的最简单方法是什么,例如:
#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