Answers:
要基于文件禁用警告,使用Xcode 3和llvm-gcc-4.2可以使用:
#pragma GCC diagnostic ignored "-Wwarning-flag"
警告名称是一些gcc警告标志。
这将覆盖命令行上的所有警告标志。但是,它并不适用于所有警告。将-fdiagnostics-show-option添加到CFLAGS中,您将看到可以用来禁用该警告的标志。
#pragma GCC diagnostic ignored "-Wwarning-flag"
已被删除
warning-flag
为gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
有一个更简单的方法来抑制未使用的变量警告:
#pragma unused(varname)
编辑:来源:http : //www.cocoadev.com/index.pl?XCodePragmas
更新:我遇到了一个新的解决方案,一个更强大的解决方案
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);
编译器显示未使用的变量警告 ok
。
解:
BOOL ok = YES;
#pragma unused(ok)
NSAssert1(ok, @"Failed to calculate the first day the month based on %@", self);
PS:您还可以设置/重置其他警告
GCC_WARN_ABOUT_RETURN_TYPE
:YES/NO
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wshadow-ivar"
// your code
#pragma GCC diagnostic pop
您可以在此处了解GCC编译指示,并获取警告的警告代码,请转到“报表浏览器”(Command + 9),选择最顶层的版本,展开日志(右侧的“ =”按钮),然后滚动至底部,您的警告代码在这样的方括号内[-Wshadow-ivar]
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wshadow-ivar"
// your code
#pragma clang diagnostic pop
为了取消对单个文件的警告,请执行以下操作:
在xcode项目中选择文件。按获取信息,转到带有构建选项的页面,输入-Wno-取消警告:
-不会-
例如
-未使用参数
如果您查看项目设置,请查看构建选项卡页面底部的GCC警告,即可获得警告的名称,通过单击每个警告,它将告诉您警告参数名称:
例如
当函数参数除了声明外没有被使用时发出警告。[GCC_WARN_UNUSED_PARAMETER,-Wunused参数]
...m:45:69: Incompatible pointer types sending...
我打开了构建说明并找到了这个警告:[-Wincompatible-pointer-types]
我只是将其重命名为,-Wno-incompatible-pointer-types
并作为标志添加到我的.m
文件中...没有更多警告... + 10我可以
使用Objective-C,许多严重错误只会显示为警告。我不仅从来没有禁用警告,我常打开“警告视为错误”(-Werror)。
可以通过正确执行操作(通常通过将对象转换为正确的类型)或在需要时声明原型来避免代码中的每种警告。
摆脱警告:尝试为有问题的对象创建类别界面
@interface NSTheClass (MyUndocumentedMethodsForNSTheClass)
-(id)theUndocumentedMethod;
@end
...
@implementation myClass : mySuperclass
-(void) myMethod {
...
[theObject theUndocumentedMethod];
...
}
顺便说一句,我强烈建议不要在运输代码中调用未记录的方法。接口可能会改变,这将是您的错。
禁止该特定警告是不安全的。编译器需要知道参数的类型,然后返回一种方法来生成正确的代码。
例如,如果您要调用这样的方法
[foo doSomethingWithFloat:1.0];
它需要一个浮点数,并且没有可见的原型,那么编译器将猜测该方法需要一个double数,而不是一个float数。这可能导致崩溃和错误解释的值。在上面的示例中,在像intel机器这样的小字节序机器上,接收器方法将看到0传递,而不是1传递。
您可以在i386 ABI文档中阅读原因,也可以修复警告。:-)
BOOL ok = [[NSCalendar currentCalendar] rangeOfUnit:NSMonthCalendarUnit startDate:&d interval:NULL forDate:self]; NSAssert1(ok, @"Failed to calculate the first day the month based on %@", self);