使用未引用的局部变量警告捕获异常

时间:2014-06-26 10:29:45

标签: c++ visual-studio c++11 visual-studio-2013

我有以下代码:

try {
    // do some stuff
}
catch(const my_exception_type& e) {
    LOG("Exception %s", e.what());
    throw;
}

问题在于,在调试版本中,LOG定义为#define LOG(...) real_logger(...),但在版本构建中定义为#define LOG(...) \\ do nothing

当然,当我在Visual Studio中编译我的发布代码时,我获得了warning C4101: 'e' : unreferenced local variable

处理异常日志记录的最佳做法是什么,而不会产生任何不必要的警告?

P.S
除了记录和重新抛出它之外,我没有对异常做任何事情。

2 个答案:

答案 0 :(得分:3)

你可以#ifdef每个catch行(非常具有侵略性)或在每个catch块中只添加一行:

catch(const my_exception_type& e) {
    UNREFERENCED_PARAMETER(e);
    LOG("Exception %s", e.what());
    throw;
}

警告消失了。或者,您可以#define MY_EXCEPTION_CATCH(...)仅在调试版本中定义e参数。

答案 1 :(得分:3)

您可以将对象标记为"已使用"通过将其转换为无效。 它对生成的机器代码没有影响,但它会抑制编译器警告。

try {
    // do some stuff
}
catch(const my_exception_type& e) {
    (void)e;
    LOG("Exception %s", e.what());
    throw;
}