Spec-Zone.ru › GCC 4

6.59.10 Диагностические директивы

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: 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API