Выборочно удалите предупреждающее сообщение GCC

Исключения всегда должны быть перехвачены контроллером в конце.
Передача < null > до контроллера не имеет смысла .
Лучше бросить / вернуть оригинальное исключение в стек.

37
задан mmal 24 January 2017 в 14:25
поделиться

4 ответа

Если вам нужно, чтобы этот код работал переносимым, вы должны привести аргумент к unsigned int , поскольку тип int может иметь размер, отличный от Int32 на некоторых платформах.

Чтобы ответить на ваш вопрос об отключении определенных предупреждений в gcc, вы можете включить определенные предупреждения в gcc с помощью -Wxxxx и отключить их с помощью -Wno-xxxx .

Из Параметры предупреждений GCC :

Вы можете запросить множество конкретных предупреждений с параметрами, начинающимися с -W , например -Wimplicit для запроса предупреждений о неявных объявлениях. Каждый из этих конкретных вариантов предупреждения также имеет отрицательную форму, начиная с -Wno- , чтобы отключить предупреждения; например, -Wno-implicit . В этом руководстве приведена только одна из двух форм: в зависимости от того, что не является значением по умолчанию.

В вашем случае рассматриваемое предупреждение: -Wformat

-Wformat
Проверьте вызовы printf, scanf и т. д., чтобы убедиться, что предоставленные аргументы имеют соответствующие типы в указанную строку формата и что преобразования, указанные в строке формата, имеют смысл. Сюда входят стандартные функции и другие, определенные атрибутами формата (см. Атрибуты функций) в семействах printf, scanf, strftime и strfmon (расширение X / Open, не в стандарте C) (или других целевых семействах). Какие функции проверяются без указания атрибутов формата, зависит от выбранной стандартной версии, и такие проверки функций без указанного атрибута отключаются с помощью -ffreestanding или -fno-builtin .

Форматы проверяются на соответствие функциям форматов, поддерживаемым GNU libc версии 2.2. К ним относятся все функции ISO C90 и C99, а также функции из спецификации Single Unix и некоторые расширения BSD и GNU. Другие реализации библиотеки могут не поддерживать все эти функции; GCC не поддерживает предупреждения о функциях, которые выходят за рамки ограничений конкретной библиотеки. Однако, если -pedantic используется с -Wformat , будут выдаваться предупреждения о функциях формата, не входящих в выбранную стандартную версию (но не для форматов strfmon, поскольку их нет ни в одной из версий. стандарта C). См. Параметры, управляющие диалектом C.

78
ответ дан 27 November 2019 в 04:07
поделиться

Я использовал следующие CFLAGS:

-Wall -Wformat=0
10
ответ дан 27 November 2019 в 04:07
поделиться

Я полагаю, вы ищете эквивалент

#ifdef WIN32
#pragma warning (disable: #num of the warning) 
#endif

в GCC ....

Вы можете искать такие параметры, как -Wno-conversion -Wno-format-security , которые выполняют эту работу здесь

http://gcc.gnu.org/onlinedocs/gcc-4.0.0/gcc/Warning-Options.html

Но с точки зрения директивы #pragma:

Цитата из списка рассылки GCC от Google :

GCC в настоящее время не предоставляет средство #pragma, которое вы ищете.

Не теряйте надежды! Есть жизнеспособные альтернативы.

Первый лучший способ исправить код, чтобы он больше не выдает предупреждения. Увы, вы заявили, что не можете этого сделать. : - (

ПРИМЕЧАНИЕ. Предупреждения отображаются как многословный, насколько ваша команда может терпеть! [см. ниже]

Еще один лучший способ игнорировать нежелательное предупреждение - постобработка вывод GCC в сценарий (например, сценарий Perl), который удаляет конкретное, точное предупреждение, которое вы хотите игнорировать.

Следующий способ игнорировать нежелательные предупреждение - отключить предупреждение для эта единица перевода. -Wno-foozle-mcgoogle, только для этой конкретной единицы перевода. Это Хотя могучий большой молот. И если предупреждение находится в файле заголовка, это может быть проникает во все ваше проект - к которому я бы направил вас решение сценария постобработки (при условии, что вам запрещено исправление кода).

Итак, в настоящее время нет, нет директивы #pragma для отключения определенных предупреждений. Вместо использования -Wall вы можете включить столько предупреждений, сколько сможете, за вычетом конкретных.

http://www.network-theory.co.uk/docs/gccintro/gccintro_31.html

или исправить код

2
ответ дан 27 November 2019 в 04:07
поделиться

Похоже, что руководство GCC действительно предоставляет способ сделать это с помощью #pragma. (вопреки тому, что Эйден Белл говорит в другом ответе здесь)

http://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Pragmas.html

например. для предупреждения -Wuninitialized вы можете сделать ...

#pragma GCC diagnostic ignored "-Wuninitialized"

... подавить предупреждение, или ...

#pragma GCC diagnostic warning "-Wuninitialized"

... обработать его как предупреждение (а не ошибку), даже если вы создаете с -Werror.

30
ответ дан 27 November 2019 в 04:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: