【问题标题】:Clang (in Xcode): start with -Weverything and manually disable particular warningsClang(在 Xcode 中):以 -Weverything 开头并手动禁用特定警告
【发布时间】:2013-04-29 08:51:51
【问题描述】:

我喜欢使用-Weverything 让编译器捕获所有可能的警告,但有时我会收到不想修复的警告。如何在出现这些特定警告时手动禁用它们?

【问题讨论】:

标签: objective-c xcode clang


【解决方案1】:

您可以使用-Wno-XYZ 禁用个别警告,XYZ 是要禁用的警告功能的名称。

【讨论】:

  • 好的,但你知道我如何从 Xcode 中的黄色警告气泡中获得正确的 XYZ 吗?请把“Xcode”带回这个问题。这是它的重要组成部分:)
  • @7cows 不,这不是一个真正的 Xcode 问题,您想设置 compiler 标志。好吧,clang 有一本手册,其中列出了所有开关和选项,包括警告。你在这里:link
  • @7cows 不要将xcode 放回标签,这真的不是 Xcode 问题。此外,您不应该将答案放入问题中 - 这就是为什么我们有单独的帖子来回答问题。
【解决方案2】:

我猜您知道如何更新构建设置以启用/禁用个别警告,并希望在您的代码中禁用警告。这是一个例子:

#ifdef TESTFLIGHT_USERTRACKING

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
#pragma clang diagnostic ignored "-Wdeprecated-implementations"

[TestFlight setDeviceIdentifier:[[UIDevice currentDevice] uniqueIdentifier]];

#pragma clang diagnostic pop

#endif

【讨论】:

    【解决方案3】:

    在 XCode 5 中,我必须构建,然后右键单击问题并选择“Reveal in Log”,然后将中间窗格选项卡设置为“全部”,以便在日志中显示问题。

    然后单击右侧的“汉堡”图标并向下滚动,我终于得到了警告的确切描述。

    /.../SettingsViewController.m:91:58: warning: creating selector for nonexistent method 'setSegueIdentifier:' [-Wselector]
        [segue.destinationViewController performSelector:@selector(setSegueIdentifier:)
    

    所以在我的情况下,下面的工作就完成了。

    #pragma clang diagnostic push
    #pragma clang diagnostic ignored "-Wselector"
    ...
    #pragma clang diagnostic pop
    

    【讨论】:

    • 我一直在寻找如何找到特定于编译器警告的标志一段时间了!谢谢你 - 非常有用!
    【解决方案4】:

    我刚刚碰到一个网站,其中列出了所有 Clang 警告和禁用它们的标志(使用 #pragma clang diagnostic ignored "-Wxyz"):

    http://goo.gl/hwwIUa(当你访问它时,你就会明白我为什么缩短了 URL)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-24
      • 2011-09-27
      • 1970-01-01
      • 2011-05-13
      • 2010-11-07
      相关资源
      最近更新 更多