使用 LLVM/Clang 忽略特定文件中的所有警告

Posted

技术标签:

【中文标题】使用 LLVM/Clang 忽略特定文件中的所有警告【英文标题】:Ignore all warnings in a specific file using LLVM/Clang 【发布时间】:2011-12-15 09:28:16 【问题描述】:

我的 ios 项目中有一些文件有一些警告,我想忽略这些警告。我不想禁用整个项目中的警告(知道如何做到这一点),只是一些特定的文件。那么,有没有办法完全忽略来自特定文件的所有警告?

我在 Xcode 4.2 上使用 LLVM 3.0 和 Clang。

【问题讨论】:

他们是您的资源,还是您项目中的其他人?如果它们是其他人的,最好的方法可能是将它们放在静态库中并链接它们。 这里给出的答案非常优雅:***.com/questions/6921884/… 【参考方案1】:

我继承了一个包含大量 320 代码的项目,该代码库向我抛出了几个警告和静态分析器错误,我没有兴趣修复这些错误,因为我将在不久的将来从项目中删除该代码。

您可以通过包含以下编译器标志来禁用特定文件的静态分析器警告:

-Xanalyzer -analyzer-disable-all-checks

您也可以将它与 -w 结合使用以禁用该文件的警告。这使我能够推进新的开发,而不必为该代码库生成的 30 条左右的警告所困扰。

使用上面的说明: 要使用 Xcode 更改文件的构建标志:

    选择目标 选择构建阶段 在“Compile Sources”阶段找到文件修改参数 双击其“编译器标志”单元格进行编辑 添加“-w -Xanalyzer -analyzer-disable-all-checks”以抑制警告和 clang 警告

【讨论】:

太棒了。非常感谢那个编译器标志,正是我所需要的。 clang 的较新版本(即 iOS6 中的 4.x)似乎已启用此选项 -Xclang -analyzer-disable-checker -Xanalyzer 表单在我新安装的 XCode(版本 4.5.1,IOS6)中仍然有效。另一种形式不起作用。 这在 XCode 4.5.2 中起作用,以在 3rd 方源 (RegexKitLite.m) (Bug Report) 中禁用“'+' 的右操作数是垃圾值”。接受的答案没有。用-Xanalyzer-w-analyzer-disable-checker 之间的区别来更新这个答案会很有帮助。【参考方案2】:

如果你只是使用 clang,那么你应该对你维护的源使用 pragma 语法(假设不可能通过适当地改变程序来删除警告)。

here is the syntax:

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wmultichar"

char b = 'df'; // no warning.

#pragma clang diagnostic pop

如果这些是您无法更改和维护的程序,您应该指定要为文件禁用的警告,而不是全部。要禁用所有,您可以添加每个文件参数-w。源更改,并且某些警告确实(或不)适用于不同的构建设置。 clang 的消息可以告诉你什么标志等同于生成的警告。

使用 Xcode 更改文件的构建标志:

选择目标 选择构建阶段 找到文件以在“编译源”阶段修改参数 双击其“编译器标志”单元格进行编辑

【讨论】:

【参考方案3】:

在贾斯汀的回答的帮助下,这就是你的做法

1。找到警告的名称。

在我的例子中是conversion

2。添加每个文件编译器标志构建阶段

使用过滤器在编译源中查找文件名,输入-Wno-[error name] 例如-Wno-conversion

【讨论】:

哈利路亚!我为此搜索了高低。 -W 选项的语法似乎没有在任何地方记录!【参考方案4】:

您可以选择特定目标 -> 构建设置,搜索 Inhibit All Warnings 并设置为 YES。这将禁用此目标上的警告。 如果您将 JSONKit 之类的代码与 cocoapods 一起使用,并且您不想看到编译器如何警告警告,这将很有用 :)

【讨论】:

以上是关于使用 LLVM/Clang 忽略特定文件中的所有警告的主要内容,如果未能解决你的问题,请参考以下文章

ndk-R19C 编译FFPMEG(LLVM/CLANG)

stm32如何使用llvm+clang编译

Clang和LLVM - 发布与调试版本

OS X 上的 LLVM 与 clang

从后端的 LLVM/clang 中提取基本块/CFG

Visual Studio 2019 LLVM clang 标志