是否可以在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