Вопрос

Обычно мне нравится включать много предупреждений при программировании.Однако некоторые библиотеки содержат код, который легко вызывает предупреждения (.., python, Qt, ..).При компиляции с помощью gcc я могу просто использовать -isystem вместо -I, чтобы отключить это.Как я могу сделать то же самое с компилятором MS?Я знаю о предупреждении #pragma, но мне хотелось бы найти решение, которое не задействует повсюду код, специфичный для компилятора.Я также знаю, что могу отключить определенные предупреждения, но это тоже не то, чего я хочу.

КСТАТИ:isystem должен быть тегом этого вопроса, но мне не разрешили это сделать..

КРАТКОЕ СОДЕРЖАНИЕ:Я хочу увидеть все предупреждения из моего кода и нет предупреждения из внешнего кода.

Это было полезно?

Решение

По состоянию на 17 августа 2017 г. это все еще кажется невозможным.

Я добавил запрос функции здесь:

https://developercommunity.visualstudio.com/content/problem/96411/impossible-to-ignore-warnings-from-system-librarie.html

Обновление 2018 года:

Проблема теперь закрыта как исправленная и доступна в стандартной установке MS VS [источник].Сообщение в блоге команды MS посвящено новым функциям [здесь].

Решение от MS является гибким.Вы можете не только различать пути, как вы это делаете с --isystem, но, например, и от того, используете ли вы #include "" или #include <>.Стоит прочитать этот пост в блоге, чтобы увидеть все различные возможности настройки.

Наконец, предупреждения можно использовать и на платформе MS VS.

Другие советы

Сейчас это существует под /experimental:external /external:I system_include_path /external:W0.Видеть https://blogs.msdn.microsoft.com/vcblog/2017/12/13/broken-warnings-theory/ для получения более подробной информации.

Понятия не имею, почему MS никогда не подхватила это.Мы можем только попробовать проголосовать за https://visualstudio.uservoice.com/forums/121579-visual-studio-2015/suggestions/14717934-add-a-cl-exe-option-for-system-headers-like-gcc-s

Нет, MSVC не имеет -isystem эквивалент.


посмотрите на вывод команды cl/?:

/wd отключить предупреждение n

/ воспринимаем предупреждение как ошибку

/wo выдать предупреждение один раз

/w установить уровень предупреждения 1-4 для n

Обратите внимание, что это отключает предупреждения для всего вашего проекта;Я помню, что при использовании Qt я бы предпочел изменить его основной заголовок, отключив и снова включив предупреждение #pragma в конце, чтобы я мог видеть все предупреждения для моего собственного источника.

Редактировать автор отредактировал свой вопрос, обновил ответ:невозможно получить ваш код с предупреждениями и код Qt без предупреждений, используя флаги компилятора:как вы собираетесь сообщить компилятору, что такое «ваш» код?

Обратите внимание, что приведенные выше флаги можно применять и на уровне файлов, поэтому это позволит вам отключить предупреждения только для тех файлов, в которые вы включаете заголовки Qt, но это все еще означает, что вы не можете увидеть их для своего собственного кода в этих файлах.

Поэтому я остаюсь с ответом выше;это не совсем красиво, но я почти уверен, что это единственный способ:используйте #pragma в начале и конце заголовков Qt.Либо измените заголовки Qt (еще более уродливо), либо выберите менее инвазивный способ, например:

//your source/header file
#include "shutuppqt.h"
#include <QString>
#include "enableallwarnings.h"

пример "shutuppqt.h"

#ifdef MSVC
  #pragma warning ( disable : 4222 ) //or whatever warning Qt emits
#else
  //....
#endif

пример "enableallwarnings.h"

#ifdef MSVC
  #pragma warning ( enable : 4222 ) //or default instead of enable
#else
  //....
#endif
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top