布尔运算符可以与预处理器一起使用吗?


74

我想知道是否可以使用预处理器OR或AND语句?我有此代码要在_DEBUG_UNIT_TEST标签(?)下运行。

我想要的是以下内容:

#if _DEBUG || _UNIT_TEST
  //Code here
#endif

如果这不可能,是否有一种解决方法来实现相同的目的而不必使用#elseif?复制代码?

Answers:


105
#if defined _DEBUG || defined _UNIT_TEST 
  //Code here 
#endif 

您也可以使用AND和NOT运算符。例如:

#if !defined _DEBUG && defined _UNIT_TEST 
  //Code here 
#endif 

14

#if接受编译器设法在编译时求值的整数type(1)的任何C ++表达式。所以是的,只要您用于测试定义性,就可以使用||和。&&defined(SOMETHING)

(1):嗯,比这更受限制;有关细节的更多信息,请参见此处的限制(在“具有这些附加限制”中)。


链接断开。
nacnudus

2
使用“ defined(SOMETHING)”并不总是您想要的。例如,该符号可能定义为“ 0”或“ 1”。这意味着它总是被定义的。
拉尔斯·彭斯约(LarsPensjö)

8
#if defined(_DEBUG) || defined(_UNIT_TEST)
  //Code here
#endif

另外,为了记录#elif,不是#elseif


3
仅供参考,标识符和名称(包括预处理器符号)以下划线后跟一个大写字母(或以两个下划线开头)保留给C和C ++标准实施;他们不应该真正在“普通”代码中使用。
Emmet
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.