Подтвердить что ты не робот

Как подавить предупреждения во внешних заголовках в Visual С++

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

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

4b9b3361

Ответ 1

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

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

#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 ) 

Ответ 2

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

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

Ответ 3

Команда Visual С++ только что добавила поддержку уровней предупреждений во внешних заголовках. Вы можете найти информацию в своем блоге: Разбитая теория предупреждений.

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

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