Is there a way to suppress warnings in Xcode?

在 Xcode 有办法压制警告吗?

例如,我正在调用一个未记录的方法,由于该方法不在头中,因此在编译时会得到一个警告。我知道我可以把它添加到我的头部来停止警告,但是我想知道除了添加到头部(这样我可以保持头部干净和标准)以外,是否还有其他方法来禁止警告?实用主义者还是什么?

87091 次浏览

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

#pragma GCC diagnostic ignored "-Wwarning-flag"

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

这将覆盖命令行上的所有警告标志。但是它不能处理所有的警告。添加-fDiagnostics-show-option 到您的 CFLAGS 中,您可以看到可以使用哪个标志来禁用该警告。

Suppressing that particular warning is not safe. The compiler needs to know the types of the arguments and returns to a method to generate correct code.

例如,如果要调用这样的方法

[ foo doSomething WithFloat: 1.0] ;

接受一个浮点数,没有可见的原型,那么编译器就会猜测这个方法接受一个浮点数,而不是一个浮点数。这可能导致崩溃和错误解释的值。在上面的示例中,在类似 Intel 机器的小型 endian 机器上,接收方法将看到0被传递,而不是1。

您可以阅读 I386 ABI 文档中的原因,或者您可以修复您的警告。 : -)

With Objective-C, a number of serious errors only appear as warnings. Not only do I 永远不会 disable warnings, I normally turn on "Treat warnings as errors" (-Werror).

Every type of warning in your code can be avoided by doing things correctly (normally by casting objects to the correct type) or by declaring prototypes when you need them.

要消除这个警告: 尝试为有问题的对象创建一个类别接口

@interface NSTheClass (MyUndocumentedMethodsForNSTheClass)


-(id)theUndocumentedMethod;
@end
...


@implementation myClass : mySuperclass


-(void) myMethod {
...
[theObject theUndocumentedMethod];
...
}

顺便说一句,我 strongly建议不要在运输代码中调用未记录的方法。接口可以而且将会改变,这将是你的错。

创建一个名为“ Undocumented.h”的新的、单独的头文件,并将其添加到项目中。然后为每个想要调用非文档化函数的类创建一个接口块,并给每个类分别赋予一个“(非文档化)”类别。然后只包括一个头文件在您的 PCH。这样,您的原始头文件保持干净,只有一个其他文件要维护,您可以注释掉一行在您的 PCH 重新启用所有的警告。

我还使用这个方法处理类别为“(Depreated)”的“ Depreated.h”中的已折旧函数。

最好的部分是您可以通过注释或取消注释单个原型来有选择地启用/禁用单个警告。

In order to surpress a warning for an individual file do the following:

选择 xcode 项目中的文件。 按下按钮,获取信息 转到有构建选项的页面 输入-Wno-否定警告:

- Wno-

例如:。

没有未使用的参数

You can get the name of the warning if you look on the project settings look at the GCC warnings located at the bottom of the build tab page, by clicking on each warning it will tell you the warning parameter name:

例如:。

每当函数参数为 除申报外未使用的。 [ GCC _ WARN _ UNUSED _ PARAMETER, - 未使用-参数]

有一种更简单的方法来抑制 未使用的变量警告:

#pragma unused(varname)

EDIT: 来源: http://www.cocoadev.com/index.pl? XCodePragmas”rel = “ norefrer”> http://www.cocoadev.com/index.pl?xcodepragmas

更新: 我发现了一个新的解决方案,一个更强大的方案

  1. 打开 Project > Edit Active Target > Build 选项卡。
  2. User-Defined: find (或者创建,如果你没有找到)下面的键: GCC_WARN_UNUSED_VARIABLE将它设置为 NO

编辑-2 Example:

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

编译器为 ok显示未使用的变量警告。

解决方案:

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

您还可以设置/重置其他警告: GCC_WARN_ABOUT_RETURN_TYPE: YES/NO

For gcc you can use

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

你可以学习 我是海湾合作委员会的实用主义者并获得警告的警告代码到 Report Navigator (Command + 9) ,选择最上面的 build,展开日志(右边的’=’按钮) ,然后滚动到底部,你的警告代码在方括号内,就像这个 [-Wshadow-ivar]

For clang you can use

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