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