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

标签 c++ if-statement c-preprocessor code-readability

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

  • 执行时间会有差异吗(或者编译器优化会消除这种差异)?
  • 如果未定义标志(即由于示例代码上方或下方编写的行),第一个解决方案是否会导致 else 出现错误?

另外:

  • 是否有适用于这种情况的普遍遵循的最佳做法?

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 block 中的代码是有条件编译的.查看案例 2 时可能不会立即显而易见。

关于c++ - 获取 if 语句以检查定义的宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59727546/

相关文章:

c++ - 未定义对 ‘_imp__InitBizLib’ 的引用

c++ - 如何在 C++ 中使用 JSExport 和 JavascriptCore

PHP IF OR Else 语句 - 执行此操作的最佳方法

ios - 是否有预处理器指令导致 XCode 构建失败?

c++ - 如何获取当前函数的标识符?

c++ - C++11 属性在 g++ 4.7.2 上工作吗?

c++ - 将 WebRTC (AudioTrackSinkInterface) 原始音频写入光盘

android - 共享首选项无法正确评估?

xpath - XPath 中是否有 "if -then - else "语句?

c - GCC 选项 -save-temps numbers after header files