Есть ли способ подавить предупреждения в Xcode?
Например, я вызываю недокументированный метод, и, поскольку метод отсутствует в заголовке, я получаю предупреждение при компиляции. Я знаю, что могу добавить его в свой заголовок, чтобы остановить предупреждение, но мне интересно, есть ли другой способ, кроме добавления его в заголовок (чтобы я мог сохранить чистые и стандартные заголовки), чтобы подавить предупреждение? Прагма что ли?
objective-c
xcode
cocoa
cocoa-touch
suppress-warnings
kdbdallas
источник
источник
BOOL ok = [[NSCalendar currentCalendar] rangeOfUnit:NSMonthCalendarUnit startDate:&d interval:NULL forDate:self]; NSAssert1(ok, @"Failed to calculate the first day the month based on %@", self);
Ответы:
Чтобы отключить предупреждения для каждого файла, используя Xcode 3 и llvm-gcc-4.2, вы можете использовать:
Где имя предупреждения - это флаг предупреждения gcc.
Это отменяет любые предупреждающие флаги в командной строке. Однако это работает не со всеми предупреждениями. Добавьте -fdiagnostics-show-option в свой CFLAGS, и вы увидите, какой флаг можно использовать для отключения этого предупреждения.
источник
#pragma GCC diagnostic ignored "-Wwarning-flag"
уже удаленоwarning-flag
одну из предупреждений , перечисленных в gcc.gnu.org/onlinedocs/gcc/Warning-Options.htmlесть более простой способ подавить предупреждения о неиспользуемых переменных :
РЕДАКТИРОВАТЬ: источник: http://www.cocoadev.com/index.pl?XCodePragmas
ОБНОВЛЕНИЕ: я нашел новое решение, более надежное
User-Defined
: найдите (или создайте, если вы его не найдете) ключ:GCC_WARN_UNUSED_VARIABLE
установите для него значениеNO
.EDIT-2 Пример:
компилятор показывает предупреждение о неиспользуемой переменной для
ok
.Решение:
PS: Вы также можете установить / сбросить другое предупреждение
GCC_WARN_ABOUT_RETURN_TYPE
:YES/NO
источник
Для gcc вы можете использовать
Вы можете узнать о прагме GCC здесь, а чтобы получить код предупреждения о предупреждении, перейдите в навигатор отчетов (Command + 9), выберите самую верхнюю сборку, разверните журнал (кнопка '=' справа) и прокрутите до внизу, и ваш код предупреждения заключен в квадратные скобки, как это
[-Wshadow-ivar]
Для clang вы можете использовать
источник
Чтобы отключить предупреждение для отдельного файла, сделайте следующее:
выберите файл в проекте xcode. нажмите получить информацию, перейдите на страницу с параметрами сборки введите -Wno-, чтобы отменить предупреждение:
например
Вы можете получить название предупреждения, если посмотрите в настройках проекта и посмотрите предупреждения GCC, расположенные в нижней части страницы вкладки сборки, щелкнув каждое предупреждение, оно сообщит вам имя параметра предупреждения:
например
источник
...m:45:69: Incompatible pointer types sending...
я открыл описание сборки и нашел это предупреждение:[-Wincompatible-pointer-types]
я просто переименовал его-Wno-incompatible-pointer-types
и добавил в качестве флага в свой.m
файл ... бум, больше предупреждений нет ... +10, если Я мог быВ Objective-C ряд серьезных ошибок появляется только как предупреждения. Я не только никогда не отключаю предупреждения, я обычно включаю «Обрабатывать предупреждения как ошибки» (-Werror).
Любого типа предупреждений в вашем коде можно избежать, если действовать правильно (обычно путем приведения объектов к правильному типу) или путем объявления прототипов, когда они вам нужны.
источник
Чтобы избавиться от предупреждения: попробуйте создать интерфейс категории для рассматриваемого объекта.
Кроме того, я настоятельно не рекомендую вызывать недокументированные методы в коде доставки. Интерфейс может и будет меняться, и это будет ваша вина.
источник
http://nshipster.com/pragma/#inhibiting-warnings - перейти к разделу запрещающих предупреждений
источник
Создайте новый отдельный файл заголовка с именем «Undocumented.h» и добавьте его в свой проект. Затем создайте один блок интерфейса для каждого класса, для которого вы хотите вызвать недокументированные функции, и присвойте каждому категорию «(Недокументированный)». Затем просто включите этот файл заголовка в свой PCH. Таким образом, ваши исходные файлы заголовков остаются чистыми, остается только один файл, который нужно поддерживать, и вы можете закомментировать одну строку в своем PCH, чтобы снова включить все предупреждения.
Я также использую этот метод для устаревших функций в 'Depreciated.h' с категорией '(Depreciated)'.
Самое приятное то, что вы можете выборочно включать / отключать отдельные предупреждения, комментируя или раскомментируя отдельные прототипы.
источник
Подавление этого конкретного предупреждения небезопасно. Компилятору необходимо знать типы аргументов и возвращаться к методу для генерации правильного кода.
Например, если вы вызываете такой метод
[foo doSomethingWithFloat: 1.0];
который принимает значение с плавающей запятой, а прототипа не видно, компилятор предположит, что метод принимает значение типа double, а не число с плавающей точкой. Это может вызвать сбои и неправильную интерпретацию значений. В приведенном выше примере на машине с прямым порядком байтов, такой как машины Intel, метод получателя будет видеть, что передано 0, а не 1.
Вы можете прочитать почему в документации i386 ABI , или вы можете просто исправить свои предупреждения. :-)
источник