Что не так с:
#warning "Come back and implement this"
#warning "Do not do that!"
#warning "Must fix this before release"
Обычно компилятор включает аргумент (ы) до - или материал после - #warning
в сообщении об ошибке или предупреждении.
Иобычно, если компилятор обнаруживает что-то, что оправдывает предупреждение, он сообщает об этом довольно четко.
Учитывая требования, я думаю, что единственный способ справиться с этим - защитить директивы #warning
...
#ifdef DO_WARNINGS
#warning "Some warning"
#endif /* DO_WARNINGS */
Большую часть времени вы компилируете без -DDO_WARNINGS
;когда вам нужно проверить предупреждения #warning
(с помощью -Werror
), то вы в конце концов включаете -DDO_WARNINGS
, принимая, что компиляция не удалась.Помните, что make -k
будет делать как можно больше даже при наличии отдельных ошибок компиляции.
В разделе 5.52.9 руководства GCC 4.4.1 сказано (частично):
5.52.9 Диагностические прагмы
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 message string
Печатает строку как сообщение компилятора при компиляции.Сообщение носит исключительно информационный характер и не является ни предупреждением компиляции, ни ошибкой.
#pragma message "Compiling " __FILE__ "..."
строка может быть заключена в скобки и напечатана с информацией о местоположении.
Я не являюсьубедитесь, что вам хочется редактировать #warning
строки в #pragma message
строки.Это поможет вам решить проблему - и это только хуже, чем добавление условной компиляции вокруг #warning
в том смысле, что #pragma message
может поддерживаться меньшим количеством компиляторов.Это зависит от ваших требований к мобильности.