组合预处理器宏和变量
Combining preprocessor macros and variables
在我的C++代码中,我必须在两个条件下执行某些代码:因为预处理器宏或布尔变量检查。例如:
bool done=false;
#ifdef _DEBUG
executeDebugCode();
done=true;
#endif
if (inputParam && !done)
executeDebugCode();
有没有一种方法可以更优雅地编写上面的代码,而不重复executeDebugCode()
函数调用两次?
编辑:executeDebugCode()
函数应该执行一次并且如果满足这两个条件中的一个。例如,一个只能在DEBUG模式下执行的函数,它可以由预处理器宏或命令行参数设置。
假设您只想执行此代码一次,如果以下条件中至少有一个为真:
if ( inputParam
#ifdef DEBUG
|| true
#endif
)
{
executeDebugCode();
}
我看到的最有效的形式是根据_DEBUG
进行精确的检查,因此您会得到:
#ifdef _DEBUG
#define SHOULD_EXECUTE_DEBUG_CODE() 1
#else
#define SHOULD_EXECUTE_DEBUG_CODE() inputParam
#endif
if (SHOULD_EXECUTE_DEBUG_CODE())
executeDebugCode();
请注意,如果inputParam
是一个局部变量(正如Sambuca在评论中指出的那样),则该宏SHOULD_EXECUTE_DEBUG_CODE
不能用于其他函数,并且为了可维护性,可能值得在函数末尾添加#undef SHOULD_EXECUTE_DEBUG_CODE
,以防止意外误用。
这样的东西怎么样:
bool debugEnabled = inputParam;
#ifdef _DEBUG
debugEnabled = true;
#endif
if (debugEnabled)
executeDebugCode()
即。使用一个标志来控制代码行为,但允许以不同的方式设置该标志。
我的方法类似于
#ifdef _DEBUG
#define SHOULD_EXECUTE 1
#else
#define SHOULD_EXECUTE 0
#endif
if (SHOULD_EXECUTE || inputParam) {
executeDebugCode();
}
通过这种方式,if语句立即显示您正在检查预处理器定义和另一个(布尔)条件。
如果未启用DEBUG,这将不会在运行时产生任何开销。
#ifdef _DEBUG
#define MY_DEBUG true
#else
#define MY_DEBUG false
#endif
if ( inputParam || MY_DEBUG )
executeDebugCode();
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 将数组的地址分配给变量并删除
- 为"adjacent"变量赋值时出现问题
- enum是C++中的宏变量还是整数变量
- 如何全局 #define 预处理器变量?
- 用于在运行时选择变量的 C++ 预处理器指令
- 在宏中定义然后取消定义预处理器变量
- 在预处理器命令中使用 qmake 变量 #include
- 使用预处理器定义多个相似的变量C++
- 如何通过Visual Studio中的预处理器传递包含字符串和引号的环境变量
- 预处理器/条件变量定义
- 使用预处理器技巧定义和声明全局变量
- 组合预处理器宏和变量
- 交换变量(C++,处理器级)
- 模板/预处理器的hack可以用来支持参数列表中间的变量参数吗?
- 使用预处理器的 #ifdef 更改变量的类型
- 预处理器:如何使用列表来定义变量和函数输入
- c预处理器-用c++#define替换对变量的所有引用
- 避免重新定义预处理器变量