获取 if 语句以检查定义的宏
Getting an if-statement to also check for a defined macro
我有一个if-else
,if
应该检查一个标志以及是否定义了宏。我想出了两种解决方案,但不确定使用其中的哪一种。
- 执行时间是否会有所不同(或者编译器优化会消除这种情况(?
- 当未定义标志时,第一个解决方案会导致
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 时,它可能不会立即显现出来。
相关文章:
- 如何实现自定义匹配器以检查 Catch2 中的对象相等性
- 如何检查函数是否在LLVM Instrumentation pass的ModulePass的系统头文件中定义?
- 未定义的类模板不会实例化以检查友元函数
- 获取 if 语句以检查定义的宏
- 如何范围检查 C++14 个用户定义的文本?
- boost::any 如何检查空值/未定义的值
- 如何检查是否定义了固定宽度的整数
- 何时在类中检查函数的定义?
- 如何在定义时静态检查模板化类?
- C++ 如何检查 char 变量是否未定义(未初始化)
- 尝试检查输入的文本与我自己的自定义答案
- 如何检查函数是否真的获得了定义为 const 的变量?
- 自定义 {fmt} 格式化函数,具有编译时格式字符串检查功能
- 如何检查类中定义的枚举类型变量是否被分配给?
- 是否有 lint 工具可以检查子类虚拟函数是否与父类定义匹配?
- C++不给出越界错误.有没有办法强制编译器检查而不是未定义的行为?
- 是否可以使用字符串检查预处理器定义
- 当模板重载可用时,检查是否存在函数的自定义重载
- 如何在内置或用户定义的文件夹中检查Imapifolder
- 自定义检查器的覆盖率引用函数输入