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


warning pragma

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

Синтаксис

#pragma warning(
 [ ]
  [ ... ]
[ н ]
#pragma warning( pop )

Замечания

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

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

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

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

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

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

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

Используйте поле, чтобы объяснить, почему предупреждение отключается или подавляется. Поле поддерживается только для и . Обоснование отображается в выходных данных формата обмена результатами статического анализа (SARIF) при указании параметра. Его значением является узкостроковый литерал в кодировке UTF-8. Чтобы создать ФАЙЛ SARIF, используйте параметр компилятора .

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

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

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

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

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

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

#pragma warning( push [ , n ] )

#pragma warning( pop )

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

отображает последнее состояние предупреждения, отправленное в стек. Все изменения, внесенные в состояние предупреждения между и , не удаляются. Рассмотрим этот пример:

#pragma warning( push )
#pragma warning( disable : 4705 )
#pragma warning( disable : 4706 )
#pragma warning( disable : 4707 )
// Some code
#pragma warning( pop )

В конце этого кода восстанавливает состояние каждого предупреждения (включая 4705, 4706 и 4707) в то, что оно было в начале кода.

При записи файлов заголовков можно использовать и , чтобы гарантировать, что изменения состояния предупреждений, внесенные пользователем, не препятствуют правильной компиляции заголовков. Используйте в начале заголовка и в конце. Например, у вас может быть заголовок, который не компилируется чисто на уровне предупреждения 4. Следующий код изменяет уровень предупреждения на 3, а затем восстанавливает исходный уровень предупреждения в конце заголовка.

#pragma warning( push, 3 )
// Declarations/definitions
#pragma warning( pop )

Выбор между и

Оба и предлагают точный контроль над подавлением предупреждений:

  • [[gsl::suppress]] подавляет только предупреждения, созданные Code Analysis Microsoft C++. Используйте его с проверкой основных рекомендаций C++ , которые можно применить к области или определенному объявлению.
  • можно использовать для любого предупреждения компилятора. Полезно, если необходимо подавлять предупреждение в определенном блоке кода, не изменяя структуру кода значительно.

По возможности используйте [[gsl::suppress]] для подавления предупреждений Code Analysis Microsoft C++.

Дополнительные сведения о параметрах компилятора, которые помогают подавлять предупреждения, см. в и .

См. также

директивы Pragma и ключевые слова и