在我的C ++代码中,我必须在两个条件下执行某些代码:因为预处理器宏或布尔变量检查。例如:
bool done=false;
#ifdef _DEBUG
executeDebugCode();
done=true;
#endif
if (inputParam && !done)
executeDebugCode();
有没有办法以更优雅的方式编写上面的代码,而不重复executeDebugCode()
函数调用两次?
编辑:
executeDebugCode()
函数应执行一次,如果满足其中一个条件。例如,一个应该只在DEBUG模式下执行的函数,可以由预处理器宏或命令行参数设置。
答案 0 :(得分:1)
我认为最适合这种形式的表格,往往效果很好,确实可以根据_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
不能用于其他函数,并且为了可维护性,可能值得添加{{ 1}}在函数结束时防止意外误用。
答案 1 :(得分:1)
假设您只想执行此代码一次,如果这些条件中至少有一个为真:
if ( inputParam
#ifdef DEBUG
|| true
#endif
)
{
executeDebugCode();
}
答案 2 :(得分:0)
这样的事情怎么样:
bool debugEnabled = inputParam;
#ifdef _DEBUG
debugEnabled = true;
#endif
if (debugEnabled)
executeDebugCode()
即。使用一个标志来控制代码行为,但允许以不同的方式设置该标志。
答案 3 :(得分:0)
如果未启用DEBUG,则不会在运行时生成任何开销。
#ifdef _DEBUG
#define MY_DEBUG true
#else
#define MY_DEBUG false
#endif
if ( inputParam || MY_DEBUG )
executeDebugCode();
答案 4 :(得分:0)
我的方法就是这样
#ifdef _DEBUG
#define SHOULD_EXECUTE 1
#else
#define SHOULD_EXECUTE 0
#endif
if (SHOULD_EXECUTE || inputParam) {
executeDebugCode();
}
这样你的if语句就会立即显示你正在检查预处理器定义和另一个(布尔)条件。