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 связаны с созданием кода. Для этих предупреждений состояние предупреждения, которое действует, когда компилятор достигает определения функции, остается в силе для остальной части функции. warningpragma Использование функции для изменения состояния номера предупреждения, превышающего 4699, действует только после окончания функции. В следующем примере показано правильное размещение предупреждения об отключении warningpragma предупреждения создания кода, а затем для его восстановления.

// 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
}

Обратите внимание, что на протяжении всего текста функции последний параметр warningpragma будет применяться для всей функции.

Отправка и отображение

Также warningpragma поддерживается следующий синтаксис, где необязательный параметр n представляет уровень предупреждения (от 1 до 4).

#pragma warning( push [ , n ] )

#pragma warning( pop )

Сохраняет pragmawarning( push ) текущее состояние предупреждения для каждого предупреждения. Сохраняет pragmawarning( push, n ) текущее состояние для каждого предупреждения и задает для глобального уровня предупреждения значение n.

Отображается pragmawarning( 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 ключевое слово