6.59.10 Диагностические директивы
GCC позволяет пользователю выборочно включать или отключать определенные типы диагностики и изменять тип диагностики. Например, политика проекта может потребовать, чтобы все исходные файлы компилировались с -Werror, но некоторые файлы могут иметь исключения, допускающие определенные типы предупреждений. Или проект может выборочно включать диагностику и рассматривать её как ошибки в зависимости от определённых макросов препроцессора.
-
#pragma GCC diagnostickind 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 messagestring - Выводит 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: note: #pragma message: TODO - Remember to fix this’.
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-4.9.4/gcc/Diagnostic-Pragmas.html