Использование атрибута GCC __unused с Objective-C
Можно ли использовать макрос атрибута __unused в параметрах метода объекта Objective-C? Я попытался разместить его в разных позициях вокруг объявления параметра, но он либо вызывает ошибку компиляции, либо, кажется, игнорируется (т.е. Компилятор все еще генерирует предупреждения неиспользуемых параметров при компиляции с -Wall -Wextra).
Кто-нибудь мог это использовать? Это просто не поддерживается с помощью Objective-C? Для справки, я в настоящее время использую сборку Apple из GCC 4.0.1.
Ответы
Ответ 1
Хорошо, я нашел ответ... похоже, это ошибка с реализацией Apple 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
В качестве примечания, ваш ответ будет компилироваться, Луис, но, как я заявил в своем вопросе, он фактически ничего не сделает или не подавит неиспользованное предупреждение, выпущенное компилятором.
EDIT: я подал отчет об ошибке с яблоком для этого rdar://6366051.
Ответ 2
Я думаю, вы можете использовать #pragma unused для обозначения аргументов как неиспользуемых. Непроверенный, но вы можете попробовать что-то вроде
- (NSString *)test:(NSString *)test {
#pragma unused (test);
return nil;
}
Ответ 3
Общей идиомой является использование следующего:
#define UNUSED(x) (void)x
void SomeFunction(int param1, int param2)
{
UNUSED(param2);
// do stuff with param1
}
Оператор UNUSED(param2)
не генерирует никакого объектного кода, исключает предупреждения о неиспользуемых переменных и явно документирует код как не использующий переменную.
Ответ 4
Я могу скомпилировать следующее просто отлично:
- (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$
So -Wall не включает в себя не включать параметр -Wunused....
Ответ 5
После боя С#pragma какое-то время я обнаружил его
+ (NSString*) runQuery:(id)query name:(NSString*)name options:(NSDictionary*)options
{
#pragma unused(name)
...
}