有没有办法在Xcode中压制警告?

有没有办法在Xcode中压制警告?

例如,我正在调用一个未logging的方法,因为该方法不在头部,所以我得到了编译警告。 我知道我可以将其添加到我的头来停止警告,但我想知道是否有一种方法,而不是将其添加到标题(所以我可以保持标题清洁和标准)来压制警告? 一个杂注什么的?

要禁用每个文件的警告,使用Xcode 3和llvm-gcc-4.2,你可以使用:

 #pragma GCC diagnostic ignored "-Wwarning-flag" 

警告名称是某个gcc警告标志。

这会覆盖命令行上的任何警告标志。 尽pipe如此,它并不适用于所有警告。 添加-fdiagnostics-show-option到你的CFLAGS,你可以看到哪个标志可以用来禁用该警告。

有一个更简单的方法来抑制未使用的variables警告:

 #pragma unused(varname) 

编辑:来源: http : //www.cocoadev.com/index.pl?XCodePragmas

更新:我遇到了一个新的解决scheme,一个更强大的

  1. 打开项目>编辑活动目标>生成选项卡。
  2. User-Defined :find(或者如果找不到,则创build)键: GCC_WARN_UNUSED_VARIABLE将其设置为NO

编辑-2例如:

 BOOL ok = YES; NSAssert1(ok, @"Failed to calculate the first day the month based on %@", self); 

编译器会显示未使用的variables警告。

解:

 BOOL ok = YES; #pragma unused(ok) NSAssert1(ok, @"Failed to calculate the first day the month based on %@", self); 

PS:您也可以设置/重置其他警告: GCC_WARN_ABOUT_RETURN_TYPEYES/NO

对于gcc你可以使用

 #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wshadow-ivar" // your code #pragma GCC diagnostic pop 

您可以在这里了解GCC编译指示,并获得警告的警告代码转到日志导航器(Command + 7),select最上面的版本,展开日志(右侧的“=”button),然后滚动到底部和那里你的警告代码是这样的方括号内[-Wshadow-ivar]

对于铿锵声,你可以使用

 #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wshadow-ivar" // your code #pragma clang diagnostic pop 

为了抑制个别文件的警告,请执行以下操作:

在xcode项目中select文件。 按获取信息转到与构build选项的页面input-Wno-取消警告:

-Wno-

例如

-Wno未使用的参数

如果您看到项目设置,查看位于生成标签页底部的GCC警告,可以通过单击每个警告来告诉您警告参数名称,您可以获得警告的名称:

例如

除了声明之外,只要函数参数没有被使用,就会发出警告。 [GCC_WARN_UNUSED_PARAMETER,-Wunused-parameter]

为了摆脱这个警告:尝试创build一个有问题的对象的类别界面

 @interface NSTheClass (MyUndocumentedMethodsForNSTheClass) -(id)theUndocumentedMethod; @end ... @implementation myClass : mySuperclass -(void) myMethod { ... [theObject theUndocumentedMethod]; ... } 

另外,我强烈build议不要在运输代码中调用未logging的方法。 界面可以而且会改变,这将是你的错。

使用Objective-C,许多严重的错误只会作为警告出现。 我不但不会禁用警告,我通常会打开“将警告视为错误”( – 错误)。

代码中的每种警告都可以通过正确处理(通常通过将对象转换为正确的types)或者在需要时声明原型来避免。

抑制特定的警告是不安全的。 编译器需要知道参数的types,并返回一个方法来生成正确的代码。

例如,如果你正在调用这样的方法

[foo doSomethingWithFloat:1.0];

这需要一个浮点数,并且没有可见的原型,那么编译器会猜测这个方法需要一个double而不是float。 这可能导致崩溃和不正确的解释值。 在上面的例子中,在像intel机器这样的小端机器上,接收器方法会看到0,而不是1。

你可以阅读为什么在i386 ABI文档 ,或者你可以修复你的警告。 🙂

创build一个名为“Undocumented.h”的新的单独头文件,并将其添加到您的项目中。 然后为每个要调用未logging函数的类创build一个接口块,并为每个类提供“(未logging)”。 然后在PCH中只包含一个头文件。 这样,您的原始头文件保持清洁,只有一个文件需要维护,您可以在PCH中注释掉一行,重新启用所有警告。

我也在“Depreciated.h”中使用这种方法来折旧函数,其中“(Depreciated)”类别。

最好的部分是你可以select性地启用/禁用个别警告,通过评论或取消注释个别原型。