捕获带有未引用局部变量警告的异常
Catching exception with unreferenced local variable warning
我有以下代码:
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
。
当然,当我在VisualStudio中编译发布代码时,我会得到warning C4101: 'e' : unreferenced local variable
。
在不生成任何不必要的警告的情况下处理异常日志记录的最佳做法是什么?
p.S
除了记录并重新抛出异常之外,我什么也没做。
您可以通过将对象强制转换为void来将其标记为"used"。它对生成的机器代码没有影响,但会抑制编译器警告。
try {
// do some stuff
}
catch(const my_exception_type& e) {
(void)e;
LOG("Exception %s", e.what());
throw;
}
您可以#ifdef
每条catch
线(非常有侵入性(,或者在每个捕获块中只添加一行:
catch(const my_exception_type& e) {
UNREFERENCED_PARAMETER(e);
LOG("Exception %s", e.what());
throw;
}
警告已经消失了。或者,您可以#define MY_EXCEPTION_CATCH(...)
仅在调试构建中定义e
参数。
相关文章:
- 警告 C4101 未引用的局部变量
- libmysql:警告:返回局部变量"行"的地址(C++/C)
- 为什么 ++ 运算符触发器返回对局部变量警告的引用
- 三元运算符:编译器不发出局部变量警告的返回引用
- 为什么 C++ 编译器不警告返回对局部变量的引用
- 警告:返回局部变量'buffer'地址
- 没有返回对局部变量的引用的编译器警告
- 警告:返回局部变量"角度"的地址 [-Wreturn-local-addr]
- 警告 C4700:未初始化的局部变量
- 为什么编译器在返回对局部变量的局部引用时不警告"returning address of local variable or temporary"?
- 在 catch 块中使用 g++ 或 clang++ 启用未引用的局部变量警告
- 编译器警告 re:对局部变量的引用
- 将未初始化的局部变量传递给函数时,C++编译器警告(?)
- 警告 C4700:使用未初始化的局部变量"p"
- 纯虚函数=未引用的局部变量警告
- 非局部变量在c++中使用匿名类型警告
- 捕获带有未引用局部变量警告的异常
- 禁用局部变量的未初始化警告
- 如何在g++中设置警告,以警告返回指向局部变量的指针
- GCC 中的断言和未使用的局部变量警告不能很好地混合?