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


warning

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

#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 4385 only once.
#pragma warning( once : 4385 )

// Report warning 4164 as an error.
#pragma warning( error : 164 )

Компилятор добавляет 4000 к любому номеру предупреждения от 0 до 999.

Для номеров предупреждений в диапазоне от 4700 до 4999, связанных с созданием кода, состояние предупреждения, действующее на момент обнаружения компилятором открывающей фигурной скобки функции, будет действовать для остальной части функции. Использование директивы pragma warning в функции для изменения состояния предупреждения с номером больше 4699 возможно только после конца функции. В следующем примере показано правильное размещение директив pragma warning для отключения предупреждающего сообщения о создании кода и его последующего восстановления.

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

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

Отправка и отображение

Директива pragma warning также поддерживает следующий синтаксис.

#pragma warning( push [ ,n ] )

#pragma warning( pop )

Где n представляет порог предупреждений (от 1 до 4).

Директива 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