获取 if 语句以检查定义的宏

Getting an if-statement to also check for a defined macro

我有一个 if-else,其中 if 应该检查一个标志以及是否定义了宏。我提出了两种解决方案,但不确定使用哪一种。

此外:


1

#ifdef FLAG_A
    if(flagB)
    {
        ...
    }
    else
#endif
    {
        ...
    }

2

#ifdef FLAG_A
    bool flagA = true;
#else
    bool flagA = false;
#endif

    if(flagA && flagB)
    {
        ...
    }
    else
    {
        ...
    }

如果 flagA 变量在局部范围内(并且在该范围内保持未修改),则两者将编译为完全相同(对于大多数编译器,在非调试版本中)。但是,如果 flagA 是全局的,则需要将其声明为 'constexpr' (在其他情况下这可能是个好主意!)

证明:https://godbolt.org/z/r9nra5

在最佳实践方面,我相信每个人都会根据自己的喜好加入,但我更喜欢版本 1。唯一的原因是,#ifdef / #endif 块中的代码立即很清楚有条件地编译。在查看案例 2 时可能不会立即显而易见。