﻿# V665\. Possible incorrect use of '\#pragma warning\(default: X\)'\. The '\#pragma warning\(push/pop\)' should be used instead\.

Анализатор обнаружил, что в коде находится некорректная последовательность директив '\#pragma warning'\.

Программисты часто считают, что после директивы "pragma warning\(default : X\)" опять начнут действовать предупреждения, отключенные ранее помощью "pragma warning\(disable: X\)"\. Это не так\. Директива 'pragma warning\(default : X\)' устанавливает предупреждение с номером 'X' в состояние, которое действует ПО УМОЛЧАНИЮ\. Это далеко не одно и то же\.

Предположим, что файл компилируется с ключом /Wall\. В этом случае, должно выдаваться предупреждение [C4061](https://www.microsoft.com/en-us/download/details.aspx?id=55984)\. Если написать "\#pragma warning\(default : 4061\)", то это предупреждение перестанет выдаваться, так как по умолчанию оно является отключенным\.

Правильным способом возвращения предыдущего состояние предупреждения является использование "\#pragma warning\(push\[ ,n \]\)" и "\#pragma warning\(pop\)"\. С описанием этих директив можно познакомиться в документации к Visual C\+\+: [Pragma Directives\. Warnings](https://www.microsoft.com/en-us/download/details.aspx?id=55984)\.

Рассмотрим пример некорректного кода:

```cpp
#pragma warning(disable: 4001)
....
//Корректный код, выдающий предупреждение 4001
....
#pragma warning(default: 4001)
```

В данном примере предупреждение 4001 будет установлено в значение по умолчанию\. Но, скорее всего, планировалось вернуть предыдущее значение, которое было до его отключения\. Для этого следует воспользоваться директивой 'pragma warning\(push\)' до отключения предупреждения и директивой 'pragma warning\(pop\)' после корректного кода\.

Корректный вариант кода:

```cpp
#pragma warning(push)
#pragma warning(disable: 4001)
....
// Корректный код, выдающий предупреждение 4001
....
#pragma warning(pop)
```



Особенное внимание предупреждению V665 должны уделять разработчики библиотек\. Неаккуратная работа с настройками предупреждений может вызвать массу неприятных моментов у пользователей такой библиотеки\.

![V665_ru/image1.png](https://import.viva64.com/docx/blog/V665_ru/image1.png)

Вы нашли спрятанный ссееккрреетт и, возможно, успеете забрать один из ппррииззоовв\. [Подробнее](https://pvs-studio.ru/ru/rules/)\.

Хорошая статья по данной теме: "[Итак, вы хотите заглушить это предупреждение в Visual C\+\+](https://pvs-studio.ru/ru/blog/posts/k0048/)"\.