Использование атрибута GCC __unused с Objective-C - PullRequest
15 голосов
/ 13 ноября 2008

Можно ли использовать макрос атрибута __unused для параметров метода объекта Objective-C? Я попытался поместить его в различные позиции вокруг объявления параметра, но это либо вызывает ошибку компиляции, либо, кажется, игнорируется (то есть компилятор все еще генерирует предупреждения о неиспользуемых параметрах при компиляции с -Wall -Wextra).

Кто-нибудь смог сделать это? Это просто не поддерживается с Objective-C? Для справки, в настоящее время я использую сборку Apple GCC 4.0.1.

Ответы [ 5 ]

18 голосов
/ 13 ноября 2008

Хорошо, я нашел ответ ... похоже, это ошибка в реализации 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

Как примечание, ваш ответ скомпилируется, Луи, но, как я уже говорил в своем вопросе, он на самом деле ничего не сделает и не подавит неиспользованное предупреждение, выданное компилятором.

РЕДАКТИРОВАТЬ: Я подал отчет об ошибке с яблоком для этого rdar: //6366051.

3 голосов
/ 13 ноября 2008

Распространенной идиомой является использование следующего:

#define UNUSED(x) (void)x
void SomeFunction(int param1, int param2)
{
  UNUSED(param2);
  // do stuff with param1
}

Оператор UNUSED(param2) не генерирует никакого объектного кода, исключает предупреждения о неиспользуемых переменных и четко документирует код как не использующий переменную.

3 голосов
/ 13 ноября 2008

Я думаю, что вы можете использовать #pragma unused, чтобы пометить аргументы как неиспользуемые. Не проверено, но вы можете попробовать что-то вроде

- (NSString *)test:(NSString *)test {
#pragma unused (test);
  return nil;
}
2 голосов
/ 13 ноября 2008

Я могу отлично скомпилировать следующее:

- (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-параметр ....

1 голос
/ 08 декабря 2009

Поработав некоторое время с #pragma, я обнаружил, что

+ (NSString*) runQuery:(id)query name:(NSString*)name options:(NSDictionary*)options
{
#pragma unused(name)
 ...

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...