我可以测试预处理器指令的值吗?

Chr*_*ris 0 c++ preprocessor c-preprocessor

我有一个未设置的预处理器指令,因此我无法更改它,它要么是 true 要么是 false。

通常我会这样做:

#ifdef DIRECTIVE
// code
#endif
Run Code Online (Sandbox Code Playgroud)

但这将始终运行,因为DIRECTIVE始终已定义。

有没有一种方法可以基本上相当于:

#if DIRECTIVE
#endif
Run Code Online (Sandbox Code Playgroud)

我想我可以做

bool DirectiveValue = DIRECTIVE;
if (DirectiveValue){

}
Run Code Online (Sandbox Code Playgroud)

但我真的希望第二个代码块能够以某种方式实现。

感谢您的任何见解!

Jer*_*fin 5

预处理器有一个#if语句,因此您可以执行以下操作:#if DIRECTIVE,它(就像通常在 C 中一样)如果表达式的值为零则测试为 false,如果表达式的值非零则测试为 true。

虽然不清楚它是否为您提供真正的优势,但还有一种中间形式:if constexpr (DIRECTIVE),它在编译时评估,而不是运行时,所以它#if在某种程度上类似于 an - 但仍然使用普通的 C++语法,并与一般语言集成,而不是它自己的小东西,其规则与编译器的其余部分略有不同。