我有一个 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/