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

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

本文关键字:定义 检查 if 语句 获取      更新时间:2023-10-16

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

  • 执行时间是否会有所不同(或者编译器优化会消除这种情况(?
  • 当未定义标志时,第一个解决方案会导致else错误(即由于在示例代码上方或下方编写的行(?

此外:

  • 是否有任何通常遵循的最佳实践可以适用于这种情况?

1

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

阿拉伯数字

#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 时,它可能不会立即显现出来。