Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Включает выборочное изменение поведения предупреждений компилятора.
Синтаксис
#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