Как подавить предупреждения во внешних заголовках в Visual C ++ - PullRequest
48 голосов
/ 30 марта 2010

Я начинаю новый проект BREW и хочу скомпилировать с Warning Level 4 (/ W4), чтобы код приложения был красивым и чистым. Проблема в том, что сами заголовки BREW не компилируются чисто с /W4.

В gcc вы можете различать заголовки приложения и системы, используя -I и -isystem, и тогда по умолчанию gcc не сообщает о каких-либо предупреждениях компиляции в системных заголовках. Есть ли эквивалентный механизм в Visual C ++?

Ответы [ 3 ]

77 голосов
/ 30 марта 2010

Используйте этот метод только вокруг блока заголовков, который вы не можете изменить, но который вы должны включить.

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

#pragma warning(push, 0)        
//Some includes with unfixable warnings
#pragma warning(pop)

Вместо 0 вы можете дополнительно указать номер предупреждения, чтобы отключить его, например:

#pragma warning( push )
#pragma warning( disable : 4081)
#pragma warning( disable : 4706 )
// Some code
#pragma warning( pop ) 
10 голосов
/ 22 декабря 2017

Команда Visual C ++ только что добавила поддержку уровней предупреждений во внешних заголовках. Вы можете найти подробности в их сообщении в блоге: Broken Warnings Theory .

По сути, он автоматически выполняет то, что рекомендовано в советах, которые он рекомендует делать вручную: устанавливает новый уровень предупреждения прямо перед директивой #include и выдает его сразу после. Существуют дополнительные флаги для указания местоположения внешних заголовков, флаг для обработки всех включений <> как внешнего, #pragma system_header и функция, недоступная в Clang или GCC (на момент написания этой статьи), чтобы видеть предупреждения во внешних заголовках по всему стеку создания шаблона при шаблон был создан в коде пользователя.

Помимо комментариев к этому посту, вы также можете найти полезное обсуждение в объявлении Reddit для этого поста .

4 голосов
/ 30 марта 2010

Я не верю, что Visual C ++ позволяет вам различать. Вы можете подделать его, используя #pragma warning, включая:

#pragma warning(push, 0)
#include "mywarningheader.h"
#pragma warning(pop)
...