warning
Включает выборочное изменение поведения предупреждающих сообщений компилятора.
#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 4385 only once.
#pragma warning( once : 4385 )
// Report warning 4164 as an error.
#pragma warning( error : 164 )
Компилятор добавляет 4000 к любому номеру предупреждения от 0 до 999.
Для номеров предупреждений в диапазоне от 4700 до 4999, связанных с созданием кода, состояние предупреждения, действующее на момент обнаружения компилятором открывающей фигурной скобки функции, будет действовать для остальной части функции. Использование директивы pragma warning в функции для изменения состояния предупреждения с номером больше 4699 возможно только после конца функции. В следующем примере показано правильное размещение директив pragma warning для отключения предупреждающего сообщения о создании кода и его последующего восстановления.
// 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
}
Обратите внимание, что во всем теле функции последний параметр директивы pragma warning будет действовать для всей функции.
Отправка и отображение
Директива pragma warning также поддерживает следующий синтаксис.
#pragma warning( push [ ,n ] )
#pragma warning( pop )
Где n представляет порог предупреждений (от 1 до 4).
Директива 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.