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

Wes*_*ley 65 c++ c-preprocessor

我想知道是否有可能有预处理器OR或AND语句?我有这个代码,我想在其下运行_DEBUG_UNIT_TEST标签(?).

我想要的是以下内容:

#if _DEBUG || _UNIT_TEST
  //Code here
#endif
Run Code Online (Sandbox Code Playgroud)

如果这是不可能的,有没有一种解决方法来实现相同的事情,而不必使用#elseif

Kir*_*sky 90

#if defined _DEBUG || defined _UNIT_TEST 
  //Code here 
#endif 
Run Code Online (Sandbox Code Playgroud)

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

#if !defined _DEBUG && defined _UNIT_TEST 
  //Code here 
#endif 
Run Code Online (Sandbox Code Playgroud)


Rom*_*kov 13

#if获取编译器在编译时管理的任何 C++表达式的整数类型(1).所以,是的,你可以使用||&&,只要你defined(SOMETHING)用来测试定义.

(1):嗯,比这更受限制; 对于细节,请参见此处的限制("有这些额外限制").

  • 使用“已定义(某物)”并不总是您想要的。例如,符号可能被定义为“0”或“1”。这意味着它总是被定义的。 (2认同)

Ash*_*ain 6

#if defined(_DEBUG) || defined(_UNIT_TEST)
  //Code here
#endif
Run Code Online (Sandbox Code Playgroud)

也是为了记录,它#elif不是#elseif.

  • 仅供参考,标识符/名称,包括预处理器符号,以下划线开头,后跟大写字母(或以两个下划线开头)保留给 C 和 C++ 标准的实现;它们不应该真正用于“普通”代码。 (3认同)