Есть ли способ подавить предупреждения в Xcode?
Есть ли способ подавить предупреждения в Xcode?
Например, я вызываю недокументированный метод, и поскольку метод не находится в заголовке, я получаю предупреждение о компиляции. Я знаю, что могу добавить его в свой заголовок, чтобы остановить предупреждение, но мне интересно, есть ли способ, кроме добавления его в заголовок (чтобы я мог сохранить заголовки чистыми и стандартными), чтобы подавить предупреждение? Прагма или что-то?
Ответы
Ответ 1
Чтобы отключить предупреждения для каждого файла, используя Xcode 3 и llvm-gcc-4.2, вы можете использовать:
#pragma GCC diagnostic ignored "-Wwarning-flag"
Если предупреждающим именем является некоторый флаг предупреждения gcc.
Это переопределяет любые предупреждающие флаги в командной строке. Однако он не работает со всеми предупреждениями. Добавьте -fdiagnostics-show-option к вашим CFLAGS, и вы можете увидеть, какой флаг вы можете использовать, чтобы отключить это предупреждение.
Ответ 2
существует более простой способ подавления предупреждений Неиспользуемая переменная:
#pragma unused(varname)
EDIT:
источник: http://www.cocoadev.com/index.pl?XCodePragmas
UPDATE:
Я пришел с новым решением, более надежным
- Откройте вкладку "Проект" > "Редактировать активный объект" > "Создать".
- В
User-Defined
: найдите (или создайте, если вы его не нашли) ключ: GCC_WARN_UNUSED_VARIABLE
установите его в NO
.
РЕДАКТИРОВАТЬ-2
Пример:
BOOL ok = YES;
NSAssert1(ok, @"Failed to calculate the first day the month based on %@", self);
компилятор показывает предупреждение неиспользуемой переменной для ok
.
Решение:
BOOL ok = YES;
#pragma unused(ok)
NSAssert1(ok, @"Failed to calculate the first day the month based on %@", self);
PS:
Вы также можете установить /reset другое предупреждение:
GCC_WARN_ABOUT_RETURN_TYPE
: YES/NO
Ответ 3
Для GCC вы можете использовать
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wshadow-ivar"
// your code
#pragma GCC diagnostic pop
Вы можете узнать о прагме GCC здесь и получить код предупреждения о предупреждении, перейдите в Навигатор отчетов (Command + 9), выберите самую верхнюю сборку, разверните журнал (кнопка "=" справа) и прокрутите до снизу и там ваш код предупреждения находится в квадратных скобках, как это [-Wshadow-ivar]
Для лязга вы можете использовать
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wshadow-ivar"
// your code
#pragma clang diagnostic pop
Ответ 4
Чтобы подавить предупреждение для отдельного файла, сделайте следующее:
выберите файл в проекте xcode.
пресса получить информацию
перейдите на страницу со строками
введите -Wno-, чтобы отменить предупреждение:
-Wno -
например.
-Wno-неиспользованный-параметр
Вы можете получить имя предупреждения, если вы посмотрите на параметры проекта, посмотрите на предупреждения GCC, расположенные в нижней части вкладки сборки, нажав на каждое предупреждение, оно сообщит вам имя параметра предупреждения:
например.
Предупреждать, когда параметр функции неиспользованный, помимо его заявления. [GCC_WARN_UNUSED_PARAMETER, -Wunused-параметр]
Ответ 5
Чтобы избавиться от предупреждения: попробуйте создать интерфейс категории для рассматриваемого объекта
@interface NSTheClass (MyUndocumentedMethodsForNSTheClass)
-(id)theUndocumentedMethod;
@end
...
@implementation myClass : mySuperclass
-(void) myMethod {
...
[theObject theUndocumentedMethod];
...
}
В стороне, я настоятельно рекомендую не вызывать недокументированные методы в транспортном коде. Интерфейс может и измениться, и это будет ваша ошибка.
Ответ 6
С Objective-C ряд серьезных ошибок появляются только как предупреждения. Я не только никогда не отключаю предупреждения, я обычно включаю "Обрабатывать предупреждения как ошибки" (-Werror).
Каждый вид предупреждения в коде может быть предотвращен путем правильной работы (обычно путем приведения объектов к правильному типу) или путем объявления прототипов, когда они вам понадобятся.
Ответ 7
http://nshipster.com/pragma/#inhibiting-warnings - перейти к запрещению раздела предупреждений
Ответ 8
Создайте новый отдельный файл заголовка под названием "Undocumented.h" и добавьте его в свой проект. Затем создайте один блок интерфейса для каждого класса, на который вы хотите вызвать недокументированные функции, и дайте каждой категории "(недокументированные)". Затем просто включите этот заголовочный файл в свой PCH. Таким образом, ваши исходные файлы заголовков остаются чистыми, есть только один другой файл для поддержки, и вы можете прокомментировать одну строку в своем PCH, чтобы снова включить все предупреждения.
Я также использую этот метод для амортизируемых функций в "Depreciated.h" с категорией "(Амортизированный)".
Лучшая часть - вы можете выборочно включать/отключать отдельные предупреждения, комментируя или раскомментируя отдельные прототипы.
Ответ 9
Подавление этого конкретного предупреждения небезопасно. Компилятор должен знать типы аргументов и возвращает метод для генерации правильного кода.
Например, если вы вызываете метод, подобный этому
[foo doSomethingWithFloat: 1.0];
который принимает float, и нет прототипа видимого, тогда компилятор угадает, что метод принимает double, а не float. Это может привести к сбоям и неверно интерпретированным значениям. В приведенном выше примере на маленькой конечной машине, такой как машины intel, метод приемника будет видеть 0, а не 1.
Вы можете прочитать, почему в i386 ABI docs, или вы можете просто исправить свои предупреждения.: -)