Поделиться через


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 будет применяться для всей функции.

Отправка и всплывающее окно

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