是否可以在Objective-C对象方法参数上使用__unused属性宏?我试着将它放在参数声明的各个位置,但是它会导致编译错误或似乎被忽略(即编译器在编译-Wall -Wextra时仍会生成未使用的参数警告)。在Objective-C中使用GCC __unused属性
有没有人能够使用它?它只是不支持Objective-C吗?作为参考,我目前正在使用Apple的GCC 4.0.1版本。
是否可以在Objective-C对象方法参数上使用__unused属性宏?我试着将它放在参数声明的各个位置,但是它会导致编译错误或似乎被忽略(即编译器在编译-Wall -Wextra时仍会生成未使用的参数警告)。在Objective-C中使用GCC __unused属性
有没有人能够使用它?它只是不支持Objective-C吗?作为参考,我目前正在使用Apple的GCC 4.0.1版本。
好吧,我找到了答案......它似乎是一个执行苹果的gcc 4.0的错误。用gcc 4.2它将按预期工作,并妥善安置如下:
-(void)someMethod:(id) __unused someParam;
它在Objective-C的发布记录笔记,如果有人有兴趣:http://developer.apple.com/releasenotes/Cocoa/RN-ObjectiveC/index.html#//apple_ref/doc/uid/TP40004309-DontLinkElementID_6
作为一个说明,你的答案会编,路易斯,但正如我在我的问题中所述,它实际上不会做任何事情或压制编译器发出的未使用警告。
编辑:我提交了一个与此rdar://6366051苹果的错误报告。
我可以编译下面就好了:
- (NSString *) test:(__unused NSString *)test {
return nil;
}
编辑:其实,这可能不是严格意义上的拱的事情:
Phoenix-VI:CouchPusher louis$ cc -c Pusher.m -Wall -Werror
Phoenix-VI:CouchPusher louis$ cc -c Pusher.m -Wall -Werror -Wunused-parameter
cc1obj: warnings being treated as errors
Pusher.m:40: warning: unused parameter ‘test’
Phoenix-VI:CouchPusher louis$
所以-Wall不包括不包括-Wunused-参数....
我想你可以使用#pragma unused标记参数为未使用。未经检验的,但你可以尝试像
- (NSString *)test:(NSString *)test {
#pragma unused (test);
return nil;
}
您需要将#pragma未使用的变量包含在parens中。所以:#pragma unused(timer)确实有用,但我并不喜欢这种方式。事实证明这是一个错误。 – 2008-11-12 23:30:50
一个常见的成语是使用以下命令:
#define UNUSED(x) (void)x
void SomeFunction(int param1, int param2)
{
UNUSED(param2);
// do stuff with param1
}
的UNUSED(param2)
语句不产生任何目标代码,消除了对于未使用的变量警告,并明确将代码记录为不使用变量。
将#pragma一会儿的战斗后,我发现这是
+ (NSString*) runQuery:(id)query name:(NSString*)name options:(NSDictionary*)options
{
#pragma unused(name)
...
}
是的,我可以编译过,但尝试的gcc -Wall -Wextra看看会发生什么:) – 2008-11-12 22:59:30
没有,没有按-Wall 't,你需要使用-Wextra ...但是我总是在我的代码中同时使用-Wall和-Wextra,并且对于未使用的警告噪声感到恼火。 – 2008-11-12 23:29:04
我使用了-Werror和大多数警告,但是我有一些传统上关闭的具体警告--Wunused-参数就是其中之一,因为委托人往往会有不能使用的参数,而这些参数是无法删除的。 – 2008-11-13 00:19:06