有没有办法抑制Xcode中的警告?

kdb*_*las 113 xcode cocoa cocoa-touch objective-c suppress-warnings

有没有办法抑制Xcode中的警告?

例如,我调用一个未记录的方法,因为该方法不在标题中,我在编译时收到警告.我知道我可以将它添加到我的标题中以停止警告,但我想知道除了将其添加到标题之外是否有其他方法(所以我可以保持标题清洁和标准)来抑制警告?一个pragma或什么?

rob*_*bor 141

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

#pragma GCC diagnostic ignored "-Wwarning-flag"
Run Code Online (Sandbox Code Playgroud)

警告名称是一些gcc警告标志.

这将覆盖命令行上的任何警告标志.但它并不适用于所有警告.在CFLAGS中添加-fdiagnostics-show-option,您可以看到可以使用哪个标志来禁用该警告.

  • 获取警告代码的简便方法:转到Log Navigator(Command + 7),选择最顶层的构建,展开日志(右侧的"="按钮),然后滚动到底部. (28认同)
  • 似乎“#pragma GCC 诊断忽略了“-Wwarning-flag””已被删除 (2认同)

the*_*ign 48

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

#pragma unused(varname)
Run Code Online (Sandbox Code Playgroud)

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

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

  1. 打开项目>编辑活动目标>构建选项卡.
  2. User-Defined:找到(或创建,如果你没有找到)密钥:GCC_WARN_UNUSED_VARIABLE将其设置为NO.

EDIT-2示例:

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

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

解:

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

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

  • 更简单的是在变量声明之前放置__unused. (29认同)

Ind*_*ore 33

对于gcc你可以使用

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wshadow-ivar"
// your code
#pragma GCC diagnostic pop
Run Code Online (Sandbox Code Playgroud)

你可以在这里了解GCC pragma并获取警告的警告代码到Log Navigator(Command + 7),选择最顶层的构建,展开日志(右边的'='按钮),然后滚动到在底部,你的警告代码在这样的方括号内[-Wshadow-ivar]

对于铿锵你可以使用

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wshadow-ivar"
// your code
#pragma clang diagnostic pop
Run Code Online (Sandbox Code Playgroud)

  • Clang支持GCC的pragma与现有源代码的兼容性.所以你只需要编写gcc格式的pragma. (3认同)

And*_*rsK 26

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

在xcode项目中选择文件.按下获取信息转到带有构建选项的页面输入-Wno-以取消警告:

-Wno-

例如

-Wno未使用的参数

如果查看项目设置,可以获取警告的名称,查看位于构建选项卡页面底部的GCC警告,通过单击每个警告,它将告诉您警告参数名称:

例如

除了声明之外,每当函数参数未使用时发出警告.[GCC_WARN_UNUSED_PARAMETER,-Wunused-parameter]

  • 这是一个很好的解决方案,当您从代码库中包含您不想修改的代码时,会触发编译器警告...... (2认同)
  • 在这里为XCode 4找到我的解决方案http://stackoverflow.com/questions/6057192/how-do-you-set-file-specific-build-settings-in-xcode-4 (2认同)

Mat*_*her 5

在 Objective-C 中,一些严重的错误只会以警告的形式出现。我不仅从不禁用警告,而且通常打开“将警告视为错误”(-Werror)。

通过正确地做事(通常通过将对象转换为正确的类型)或在需要时声明原型,可以避免代码中的每种类型的警告。

  • 虽然这是很好的一般建议,但它并没有回答问题。并非所有警告都是严重或严重的;许多都是微不足道的。假设需要使用第三方库并且无法修改它,无论出于何种原因(遗留代码库、打算由第三方链接的代码、老板规定等)。在这些情况下,抑制特定的琐碎警告是完全可以接受的。 (14认同)

Mar*_*ley 5

要消除警告:尝试为相关对象创建类别界面

@interface NSTheClass (MyUndocumentedMethodsForNSTheClass)

-(id)theUndocumentedMethod;
@end
...

@implementation myClass : mySuperclass

-(void) myMethod {
...
   [theObject theUndocumentedMethod];
...
}
Run Code Online (Sandbox Code Playgroud)

顺便说一句,我强烈建议不要在发货代码中调用未记录的方法.界面可以而且会改变,这将是你的错.