我有以下代码:
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
除了记录和重新抛出它之外,我没有对异常做任何事情。
答案 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;
}