GCC 和 Clang 未对未使用的异常变量发出警告
Posted
技术标签:
【中文标题】GCC 和 Clang 未对未使用的异常变量发出警告【英文标题】:GCC and Clang not warning on unused exception variable 【发布时间】:2019-05-03 21:41:37 【问题描述】:考虑以下无用的代码——特别是catch
子句中的int k
:
int main()
try
throw 0;
catch(int k)
return 0;
当使用 g++(8.3.0 版)和 clang++(8.0.0)和 -Wall -Wextra
编译时,尽管未使用 k
变量,但不会发出警告。 Visual Studio 确实会发出警告,这就是我在自己的项目中发现这种差异的方式。
这是 GCC 和 Clang 中的错误,还是我误解了 -Wunused
标志集?
【问题讨论】:
可能是有意的,类似于未使用的命名模板参数没有警告。 您是否启用了优化?有时这些警告只会在优化过程中出现。 @1201ProgramAlarm-O
-O1
-O2
-O3
没有任何改变。
我看到“确保我们将 catch 参数标记为已使用,否则我们将收到关于未使用 ((anonymous)) 的警告。”。如果我删除以下行,我会收到警告“警告:未使用的变量 'k'”。评论很奇怪,我认为值得向 gcc 的 bugzilla 报告,除非你能找到以前关于同一问题的错误报告。
gcc.gnu.org/bugzilla/show_bug.cgi?id=90353
【参考方案1】:
叮当
错误报告:https://bugs.llvm.org/show_bug.cgi?id=41746
事实证明,clang 有警告 -Wunused-exception-parameter
,尽管它没有被任何组 -Wall
、-Wextra
或 -Wunused
激活。
海合会
错误报告:https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90353
正如对此问题的评论和错误报告中所述,所有 catch 参数始终标记为已使用。正在链接的错误报告中对此进行调查。
【讨论】:
以上是关于GCC 和 Clang 未对未使用的异常变量发出警告的主要内容,如果未能解决你的问题,请参考以下文章
你如何为 clang 和 gcc 编写一个 makefile?