【发布时间】:2013-04-29 08:51:51
【问题描述】:
我喜欢使用-Weverything 让编译器捕获所有可能的警告,但有时我会收到不想修复的警告。如何在出现这些特定警告时手动禁用它们?
【问题讨论】:
-
请注意,您的方法实际上并不是处理事情的最佳方式:programmers.stackexchange.com/questions/122608/…
标签: objective-c xcode clang
我喜欢使用-Weverything 让编译器捕获所有可能的警告,但有时我会收到不想修复的警告。如何在出现这些特定警告时手动禁用它们?
【问题讨论】:
标签: objective-c xcode clang
您可以使用-Wno-XYZ 禁用个别警告,XYZ 是要禁用的警告功能的名称。
【讨论】:
XYZ 吗?请把“Xcode”带回这个问题。这是它的重要组成部分:)
clang 有一本手册,其中列出了所有开关和选项,包括警告。你在这里:link
xcode 放回标签,这真的不是 Xcode 问题。此外,您不应该将答案放入问题中 - 这就是为什么我们有单独的帖子来回答问题。
我猜您知道如何更新构建设置以启用/禁用个别警告,并希望在您的代码中禁用警告。这是一个例子:
#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
【讨论】:
在 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
【讨论】:
我刚刚碰到一个网站,其中列出了所有 Clang 警告和禁用它们的标志(使用 #pragma clang diagnostic ignored "-Wxyz"):
http://goo.gl/hwwIUa(当你访问它时,你就会明白我为什么缩短了 URL)。
【讨论】: