gpt4 book ai didi

c++ - 如何打开 icc/icpc 警告?

转载 作者:可可西里 更新时间:2023-11-01 18:25:23 26 4
gpt4 key购买 nike

我在 Linux 上安装了英特尔编译器 composer_xe_2013_sp1.3.174。我对 icc 警告感到困惑。用一个简单的程序 main.c 喂 icc,如下所示:

int main(int argc, char **argv) {
int a = 1;
unsigned int b = -22;
if (b = a) {

}
}

我使用以下命令编译文件:icc -Wall main.c。令人惊讶的是,该命令在没有任何警告的情况下静默运行。我必须打开 icc 上的警告开关吗?谢谢

最佳答案

Intel 编译器并没有像 gcc 那样有很好的警告预设(至少在 Linux 上是这样)。主要的警告选项是-wn,其中n可以是0到5。默认是1,4&5在Linux上没有意义。它还支持一些 gcc 选项,如 -Wall-Wextra。然而:

  • -Wall 与 gcc 相比非常简约,如您所见
  • -w2-w3 启用一些有用的诊断,但也有很多垃圾评论
  • -diag-disable:remark 删除了垃圾邮件,但也删除了很多有用的诊断信息

最后 -w3 -diag-disable:remark 是 icc 拥有的最好的预设,但它仍然比 gcc -Wall 更简约。相反,您需要从最少的一组警告开始并建立自己的警告,或者从最多的诊断开始并使用 -wd 禁用任何烦人的警告。

建立

第一种方法的主要缺点是英特尔并没有真正记录其大部分警告,因此很难知道可以启用哪些内容。但是,它确实支持许多 GCC 命令行标志,因此 GCC 文档是一个很好的起点。例如,这里有一些相对接近于 g++ -Wall 的设置,如果你想用其中一个进行开发并很有可能用另一个进行干净构建,这很方便:

icpc -Wall -Warray-bounds -Wchar-subscripts -Wcomment -Wenum-compare -Wformat -Wuninitialized -Wmaybe-uninitialized -Wmain -Wnarrowing -Wnonnull -Wparentheses -Wpointer-sign -Wreorder -Wreturn-type -Wsign-compare -Wsequence-point -Wtrigraphs -Wunused-function -Wunused-but-set-variable -Wunused-variable -Wwrite-strings

这与 gcc -Wall 不完全匹配。 GCC 和 ICC 对上述警告的实现存在差异。我也找不到与这些 GCC 警告匹配的 ICC 选项:

-Wformat-contains-nul
-Wunused-label
-Wstrict-overflow
-Wvolatile-register-var

我有意将这些排除在外,因为 ICC 版本比 GCC 垃圾邮件多得多:

-Wstrict-aliasing   So broad that any use of polymophism will cause this warning
-Wswitch Requires a default even if you have cases for all enumeration values

修剪

如果 GCC 奇偶校验不是问题,那么了解 ICC 有哪些警告的最简单方法是启用它们,然后决定您是否喜欢它们。如果您不喜欢警告,您可以使用它的诊断编号禁用它,这通常比 GCC 的选项具有更多的粒度。

icpc -w3 -wd1418,2259

以下是我过去看到的一些被禁用的诊断:

  • 383:值复制到临时,引用临时使用
  • 869: 从未引用参数“*”
  • 981:操作数以未指定的顺序求值
  • 1418: 没有预先声明的外部函数定义
  • 1572:浮点相等和不等比较不可靠
  • 2259:非指针转换可能会丢失重要位
  • 11074:限制最大尺寸(或最大总尺寸)禁止内联
  • 11076:要获得完整报告,请使用 -qopt-report=4 -qopt-report-phase ipo
  • 161: 禁用对无法识别的编译指示的警告

但我鼓励您从所有这些开始,只减少对您的代码库有问题的那些。

关于c++ - 如何打开 icc/icpc 警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27343360/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com