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


69

我的iOS项目中有一些带有警告的文件,我想忽略这些警告。我不想禁用整个项目中的警告(不知道如何执行此操作),仅禁用某些特定文件。因此,有没有一种方法可以完全忽略特定文件中的所有警告?

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


他们是您的资源,还是您项目中的其他人?如果他们是别人的,最好的办法可能是把它们放在一个静态库和连接它们。
史蒂芬费舍尔

这里给出的答案非常优雅: stackoverflow.com/questions/6921884/…–
奥德·本·多夫

Answers:


64

如果您仅使用clang,则应对所维护的源使用编译指示语法(假设无法通过适当地更改程序来消除警告)。

语法如下:

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

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

#pragma clang diagnostic pop

如果这些程序是您不能更改且无法维护的程序,则应指定要针对文件而不是全部禁用的警告。要禁用所有功能,可以添加per file参数-w。源代码会更改,并且某些警告会(或不会)适用于不同的构建设置。clang的消息可以告诉您什么标志等于生成的警告。

要使用Xcode更改文件的构建标志,请执行以下操作:

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

95

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

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

-Xanalyzer -analyzer-disable-all-checks

您可以将其与-w组合使用,以禁用该文件的警告。这使我可以继续进行新的开发,而不必为该代码库生成的30多个警告所困扰。

按照上面的说明进行操作:要使用Xcode更改文件的构建标志,请执行以下操作:

  1. 选择目标
  2. 选择构建阶段
  3. 找到文件以修改“编译源”阶段中的参数
  4. 双击其“编译器标志”单元格进行编辑
  5. 添加“ -w -Xanalyzer -analyzer-disable-all-checks”以禁止显示警告和铛警告

太棒了 多亏了那个编译器标志,正是我所需要的。
Mike

4
铛的新版本(即,在iOS6的4.x版)似乎已经取得了这个选项-Xclang -analyzer -禁用-检查
ORJ

3
-Xanalyzer表单仍然可以在我新安装的XCode(版本4.5.1,IOS6)中使用。其他形式不起作用。
fishinear 2012年

1
这在XCode 4.5.2中起作用,以禁用第三方资源(RegexKitLite.m)中的“ +的右操作数是垃圾值”(Bug报告)。接受的答案没有。这将是大有裨益的之间有什么区别来更新这个答案-Xanalyzer-w-analyzer-disable-checker做。
杰夫罗

21

在贾斯汀的答案的帮助下,这就是您的工作方式

1.找到警告的名称。

就我而言 conversion

在此处输入图片说明

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

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

在此处输入图片说明


哈利路亚!我为此高低搜寻。-W选项的语法似乎在任何地方都没有记录!
mluisbrown 2015年

3

您可以选择特定目标->构建设置,搜索禁止所有警告并设置为是。这将禁用此目标上的警告。如果您将诸如JSONKit之类的代码与cocoapods一起使用,并且您不希望看到编译器如何哭泣警告,则这可能很有用:)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.