Как мне временно отключить предупреждения в исходном файле цели c? - PullRequest
7 голосов
/ 03 марта 2011

Один проект, над которым я работаю, имеет систему сборки, которая не выдает предупреждений.

Но у меня есть код, который нуждается в предупреждениях для работы. Вот пример

NSString* title = @"";
if ([view respondsToSelector:@selector(title)]) {
  title = [view title];
}

После некоторого поиска в Google я попытался отключить предупреждения для блока кода, обернув эту область кода

#pragma warning disable
// my code
#pragma warning restore

Не работает: (

Кто-нибудь знает, как это сделать в Xcode?

Любая помощь приветствуется.

-cv

Ответы [ 3 ]

11 голосов
/ 17 апреля 2013
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wshadow-ivar"
// your code
#pragma GCC diagnostic pop

Вы можете узнать о прагме GCC здесь и получить код предупреждения о предупреждении, перейдите в Навигатор журналов (Command + 7), выберите самую верхнюю сборку, разверните журнал ('= '' справа) и прокрутите вниз, и там ваш код предупреждения будет заключен в квадратные скобки, как это [-Wshadow-ivar]


Редактировать

Длялязг можно использовать

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wshadow-ivar"
// your code
#pragma clang diagnostic pop
2 голосов
/ 03 марта 2011

Есть несколько вещей, которые вы могли бы здесь сделать, но простейшим было бы, вероятно, переписать ваш код просто чуть-чуть.

NSString* title = @"";

if ([view respondsToSelector:@selector(title)]) {
  title = [(id)view title];
}

Приведение переменной представления к id перед отправкой сообщения должно гарантировать, чтоПока метод с именем -title существует где-либо, он будет молчать.

Другой вариант:

NSString* title = @"";

if ([view respondsToSelector:@selector(title)]) {
  title = [view performSelector:@selector(title)];
}

Это немного отличается от вышеизложенного тем, что он непотребовать, чтобы файл «увидел» любой метод с именем title;но это немного более многословно.

Редактировать: Я знаю, что ни один из этих подходов на самом деле не поворачивает предупреждения на какое-то время, а скорее подавляет их.

Подавление, если сделано правильно, по крайней мере, обычно лучше, чем просто игнорирование.

1 голос
/ 06 июня 2011

Ближайший способ сделать то, что вы хотите, это использовать GCC диагностическая прагма . Подробности см. В этом вопросе .

...