VS2017 C ++: как подавить предупреждения после «Генерации кода ...» - PullRequest
0 голосов
/ 20 ноября 2018

Я получаю предупреждения после того, как в окне MSVC-Output сказано «Генерация кода ...».

1>Note: including file: D:\FOO\INC\ippcc.h
1>Generating Code...
1>d:\FOO\inc\ipinctrlimpl.h(130): warning C4701: potentially uninitialized local variable 'hResult' used
1>d:\FOO\inc\iwatchdogimpl.h(158): warning C4702: unreachable code
1>   Creating library ..\..\LIB/FOO.lib and object ..\..\LIB/FOO.exp
1>FOO.vcxproj -> D:\FOO\FOO.dll
1>Done building project "FOO.vcxproj".

Как можно подавить эти предупреждения, не отключая их для всего решения?Я сам не могу прикоснуться к коду, поэтому исправить их нет возможности.

Согласно этой записи , компилятор генерирует машинный код в этот момент.Как вообще возможно, что эти предупреждения генерируются тогда?В конце концов, базовая компиляция уже выполнена.

ОБНОВЛЕНИЕ:

Установка глобального уровня предупреждений на / W3 в настройках проекта, а не на / W4, предотвращает эти предупреждения (потому что они являются предупреждениями уровня 4).

Вместо глобальных настроек / W3 я также могу явно отключить локальные предупреждения для критических включений:

#pragma warning(push)
#pragma warning(disable : 4701 4702)
#include "CriticalInclude.h"
#pragma warning(pop)

Но тут возникает странная вещь: локальная настройка / W3 (иличетный / W1) через

#pragma warning(push, 3)
#include "CriticalInclude.h"
#pragma warning(pop)

не предотвращает эти предупреждения.Почему?

Кажется, что нажатие на warning disable трактуется иначе, чем нажатие на новый уровень предупреждения.

Ответы [ 2 ]

0 голосов
/ 26 ноября 2018

Так что, как и в моем предыдущем обновлении, локальное снижение уровня предупреждения не похоже на этап «Генерация кода».

#pragma warning(push, 1)
#include "CriticalInclude.h"
#pragma warning(pop)

Однако явное отключение этих предупреждений локально влияет на этап генерации кода:

#pragma warning(push)
#pragma warning(disable : 4701 4702)
#include "CriticalInclude.h"
#pragma warning(pop)

На мой взгляд, это похоже на ошибку в компиляторе.

0 голосов
/ 20 ноября 2018

Вы не должны подавлять предупреждения, а иметь дело с ними.
Если у вас есть недоступный код, зачем он там?
Убедитесь, что вы инициализируете переменные.

Базовая компиляция несделано на этом этапе в соответствии с этим ответом:
VC ++ «Генерация кода», что это значит?

Кроме того, если это не ваши файлы, вы должны поднять проблемус разработчиком.Но это временно
Как подавлять предупреждения во внешних заголовках в Visual C ++

...