6.61.12 Диагностические директивы
GCC позволяет пользователю выборочно включать или выключать определённые типы диагностики и изменять их тип. Например, политика проекта может требовать, чтобы все исходные файлы компилировались с -Werror, но некоторые файлы могут иметь исключения, позволяющие использовать определённые типы предупреждений. Или проект может выборочно включать диагностику и обрабатывать её как ошибки в зависимости от того, какие препроцессорные макросы определены.
#pragma GCC diagnostic kind option-
Изменяет обработку диагностики. Обратите внимание, что не все диагностические сообщения можно изменить; в настоящий момент можно управлять только предупреждениями (обычно контролируемыми с помощью ‘-W…’), и не всеми из них. Используйте -fdiagnostics-show-option для определения, какие диагностические сообщения можно контролировать и какие параметры их контролируют.
kind — это ‘error’ для обработки этого диагностического сообщения как ошибки, ‘warning’ для обработки как предупреждения (даже если -Werror включен) или ‘ignored’ если диагностическое сообщение должно быть проигнорировано. option — это строка в двойных кавычках, соответствующая параметру командной строки.
#pragma GCC diagnostic warning "-Wformat" #pragma GCC diagnostic error "-Wformat" #pragma GCC diagnostic ignored "-Wformat"
Обратите внимание, что эти директивы переопределяют любые параметры командной строки. GCC отслеживает местоположение каждой директивы и выдает диагностические сообщения в соответствии с состоянием на данном месте в исходном файле. Таким образом, директивы, появляющиеся после строки, не влияют на диагностику, вызванную этой строкой.
#pragma GCC diagnostic push#pragma GCC diagnostic pop-
Принуждает GCC запоминать состояние диагностических сообщений на каждом
push, и восстанавливать до этого момента на каждомpop. Если уpopнет соответствующейpush, восстанавливаются параметры командной строки.#pragma GCC diagnostic error "-Wuninitialized" foo(a); /* error is given for this one */ #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wuninitialized" foo(b); /* no diagnostic for this one */ #pragma GCC diagnostic pop foo(c); /* error is given for this one */ #pragma GCC diagnostic pop foo(d); /* depends on command-line options */
GCC также предлагает простой механизм для вывода сообщений во время компиляции.
#pragma message string-
Выводит string как сообщение компилятора во время компиляции. Сообщение носит информационный характер и не является предупреждением или ошибкой компиляции.
#pragma message "Compiling " __FILE__ "..."
string может быть заключено в скобки и выводится с информацией о расположении. Например,
#define DO_PRAGMA(x) _Pragma (#x) #define TODO(x) DO_PRAGMA(message ("TODO - " #x)) TODO(Remember to fix this)выводит ‘/tmp/file.c:4: примечание: #pragma message: TODO - Не забудьте исправить это’.
Далее: Директивы видимости, Предыдущее: Директивы слабости, Вверх: Директивы [Содержание][Индекс]
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-8.5.0/gcc/Diagnostic-Pragmas.html