【问题标题】:How to get rid of V677: custom declaration of a standard type warning如何摆脱 V677:标准类型警告的自定义声明
【发布时间】:2017-12-07 23:33:33
【问题描述】:

我们将 PVS Studio(开源项目的免费变体)与 travis-ci 结合使用,由于某种原因,它会为位于 /usr/local/clang-3.5.0/lib/clang/3.5.0/include 的文件产生错误:

/usr/local/clang-3.5.0/lib/clang/3.5.0/include/stddef.h:58:1:警告:V677 标准“size_t”类型的自定义声明。应该使用来自系统头文件的声明。 /usr/local/clang-3.5.0/lib/clang/3.5.0/include/stddef.h:86:1:警告:V677 标准“wchar_t”类型的自定义声明。应该使用来自系统头文件的声明。 /usr/local/clang-3.5.0/lib/clang/3.5.0/include/stdarg.h:30:1:警告:V677 标准“va_list”类型的自定义声明。应该使用来自系统头文件的声明。 /usr/local/clang-3.5.0/lib/clang/3.5.0/include/stddef.h:47:1:警告:标准“ptrdiff_t”类型的 V677 自定义声明。应该使用来自系统头文件的声明。

这个位置看起来像是非标准编译器的“系统”头文件示例,并且远离项目根目录(AFAIR 位于 /home: 标准 travis 位置)。脚本运行使用来自https://www.viva64.com/en/pvs-studio-download-linux/ 的最新版本,最新运行时间为“Mon Jul 3 20:13:42 UTC 2017”(不幸的是,未保存使用的版本)。

【问题讨论】:

  • 显然这些类型被声明了两次,编译器只认为其中一个位置是实际的库。该自定义库和 clang 标准库之间可能存在某种库冲突。
  • 您是使用/usr/local/clang-3.5.0/bin/clang 还是使用其他编译器编译您的项目?如果你不使用这个非系统clang 我怀疑某种CFLAGS 污染。执行构建的用户的env 命令是否包含CFLAGS
  • “如何摆脱……” - 分别使用标准标题。按预期使用它们。
  • @tgregory 据我所知,CC 只是 clang(然后 CMake 扩展为 /usr/local/clang-3.5.0/bin/clang),而 CFLAGS 只是 -O0
  • PVS 对 Clang 使用它的内置标头(在常见问题解答中提到)不满意。因此,将-nobuiltininc 添加到CFLAGS 应该使Clang 使用系统头文件并忽略内置头文件。您可以尝试将-v 添加到CFLAGS 以检查它在哪里寻找标题。

标签: pvs-studio


【解决方案1】:

如果将clang更新到clang-4.0,PVS似乎不会检测到错误。

【讨论】:

    【解决方案2】:

    如果编译器位于不寻常的地方,建议添加分析器异常的新路径,以便您在报告中只看到自己项目代码的警告。

    pvs-studio-analyzer analyze ... -e /path/to/exclude-path ...

    pvs-studio ... --exclude-path /path/to/exclude-path ...

    【讨论】:

      猜你喜欢
      • 2011-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-27
      • 2010-12-10
      • 2017-09-17
      • 1970-01-01
      相关资源
      最近更新 更多