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


warning pragma

Включает выборочное изменение поведения предупреждений компилятора.

Синтаксис

#pragma warning(
warning-specifier : warning-number-list , justification : string-literal[ ]
; warning-specifier : warning-number-list [ ... ])
#pragma warning( push ,[ н ])
#pragma warning( pop )

Замечания

Доступны следующие параметры описателя предупреждений.

описатель предупреждений Значение
1, , 234 Примените заданный уровень к указанным предупреждениям. Например: #pragma warning (3 : 5033) отключает предупреждение 5033 (обычно предупреждение уровня 1), если уровень предупреждения не установлен на уровне /w3 или выше. Также может использоваться для включения указанного предупреждения, которое отключено по умолчанию.
default Сброс поведения предупреждения до значения по умолчанию. Также включает указанное предупреждение, которое по умолчанию отключено. Предупреждение будет создано по умолчанию, задокументировано, уровень.

Дополнительные сведения см. в предупреждения компилятора, отключенные по умолчанию.
disable Не выдавать указанные предупреждающие сообщения. Необязательное justification свойство разрешено.
error Сообщите указанные предупреждения в виде ошибок.
once Отображение указанных сообщений только один раз.
suppress Отправляет текущее состояние pragma в стеке, отключает указанное предупреждение для следующей строки, а затем выводит стек предупреждений, чтобы состояние pragma было сброшено. Необязательное justification свойство разрешено.

В следующей инструкции кода показано, что параметр warning-number-list может содержать несколько номеров предупреждений, и что в одной директиве warning-specifier можно указать несколько параметров pragma.

#pragma warning( disable : 4507 4034; once : 4385; error : 164 )

Однако, если justification поле присутствует, можно указать только один номер предупреждения. Следующая инструкция code иллюстрирует использование justification поля.

#pragma warning( disable : 4507, justification : "This warning is disabled" )

Поля justification позволяют объяснить, почему предупреждение отключается или подавляется. Поле justification поддерживается только для и disablesuppresswarning-specifier. Это значение появится в выходных данных SARIF при указании параметра /analyze:log:includesuppressed . Его значением является узкостроковый литерал в кодировке UTF-8.

Эта директива функционально эквивалентна следующему коду:

// Disable warning messages 4507 and 4034.
#pragma warning(disable : 4507 4034)

// 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 compiling Test()
}

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