warning
pragma
Включает выборочное изменение поведения предупреждений компилятора.
Синтаксис
#pragma warning(
warning-specifier
:
warning-number-list
[;
warning-specifier
:
warning-number-list
... ])
#pragma warning( push
[,
n ])
#pragma warning( pop )
Замечания
Доступны следующие параметры описателя предупреждений.
описатель предупреждений | Значение |
---|---|
1 , 2 , 3 , 4 |
Примените заданный уровень к указанным предупреждениям. Также включает указанное предупреждение, которое по умолчанию отключено. |
default |
Сброс поведения предупреждения до значения по умолчанию. Также включает указанное предупреждение, которое по умолчанию отключено. Предупреждение будет создано по умолчанию, задокументировано, уровень. Дополнительные сведения см. в предупреждения компилятора, отключенные по умолчанию. |
disable |
Не выдавать указанные предупреждающие сообщения. |
error |
Сообщите указанные предупреждения в виде ошибок. |
once |
Отображение указанных сообщений только один раз. |
suppress |
Отправляет текущее состояние pragma в стеке, отключает указанное предупреждение для следующей строки, а затем выводит стек предупреждений, чтобы состояние pragma было сброшено. |
В следующей инструкции кода показано, что параметр warning-number-list
может содержать несколько номеров предупреждений, и что в одной директиве pragma можно указать несколько параметров warning-specifier
.
#pragma warning( disable : 4507 34; once : 4385; error : 164 )
Эта директива функционально эквивалентна следующему коду:
// Disable warning messages 4507 and 4034.
#pragma warning( disable : 4507 34 )
// Issue warning C4385 only once.
#pragma warning( once : 4385 )
// Report warning C4164 as an error.
#pragma warning( error : 164 )
Компилятор добавляет 4000 к любому номеру предупреждения, который составляет от 0 до 999.
Номера предупреждений в диапазоне 4700-4999 связаны с созданием кода. Для этих предупреждений состояние предупреждения, которое действует, когда компилятор достигает определения функции, остается в силе для остальной части функции. Использование warning
pragma в функции для изменения состояния номера предупреждения, превышающего 4699, действует только после окончания функции. В следующем примере показано правильное размещение warning
pragma, чтобы отключить предупреждение создания кода, а затем восстановить его.
// pragma_warning.cpp
// compile with: /W1
#pragma warning(disable:4700)
void Test() {
int x;
int y = x; // no C4700 here
#pragma warning(default:4700) // C4700 enabled after Test ends
}
int main() {
int x;
int y = x; // C4700
}
Обратите внимание, что в теле функции последний параметр warning
pragma будет применяться для всей функции.
Отправка и всплывающее окно
warning
pragma также поддерживает следующий синтаксис, где необязательный параметр n представляет уровень предупреждения (от 1 до 4).
#pragma warning( push [ , n ] )
#pragma warning( pop )
pragma
warning( push )
сохраняет текущее состояние предупреждения для каждого предупреждения.
pragma
warning( push, n )
сохраняет текущее состояние для каждого предупреждения и задает для глобального уровня предупреждения значение n.
pragma
warning( pop )
отображает последнее состояние предупреждения, отправленное в стек. Все изменения, внесенные в состояние предупреждения между push
и pop
, не удаляются. Рассмотрим этот пример:
#pragma warning( push )
#pragma warning( disable : 4705 )
#pragma warning( disable : 4706 )
#pragma warning( disable : 4707 )
// Some code
#pragma warning( pop )
В конце этого кода pop
восстанавливает состояние каждого предупреждения (включая 4705, 4706 и 4707) в то, что оно было в начале кода.
При записи файлов заголовков можно использовать push
и pop
, чтобы гарантировать, что изменения состояния предупреждений, внесенные пользователем, не препятствуют правильной компиляции заголовков. Используйте push
в начале заголовка и pop
в конце. Например, у вас может быть заголовок, который не компилируется чисто на уровне предупреждения 4. Следующий код изменяет уровень предупреждения на 3, а затем восстанавливает исходный уровень предупреждения в конце заголовка.
#pragma warning( push, 3 )
// Declarations/definitions
#pragma warning( pop )
Дополнительные сведения о параметрах компилятора, которые помогают подавлять предупреждения, см. в /FI
и /w
.
См. также
директивы Pragma и ключевые слова __pragma
и _Pragma