11
votes

-System pour compiler MS Visual Studio C ++

J'aime habituellement avoir beaucoup d'avertissements activés lors de la programmation. Cependant, certaines bibliothèques contiennent du code qui provoque facilement des avertissements (.., Python, QT, ..). Lors de la compilation avec GCC, je peux simplement utiliser -System au lieu de -i pour faire taire cela. Comment puis-je faire la même chose avec le compilateur MS? Je connais l'avertissement #pragma, mais je voudrais une solution qui n'implique pas de code spécifique du compilateur partout. Je sais aussi que je peux désactiver des avertissements spécifiques, mais ce n'est pas ce que je veux non plus.

BTW: L'isysem devrait être une balise de cette question, mais je n'ai pas été autorisé à faire ça ..

Résumé: Je veux voir tous les avertissements à partir de mon code et no avertissements du code externe.


0 commentaires

4 Réponses :


1
votes

Non, MSVC n'a pas d'équivalent d'équivalent code>.


Regardez la sortie de sortie de CL /? : P>

/ wd désactiver l'avertissement n p>

/ Nous traitons l'avertissement n comme une erreur p>

/ wo problème d'avertissement n une fois p>

/ w Ensemble de niveau d'avertissement 1-4 pour N P> blockQuote>

Notez que cela désactive les avertissements de votre projet; Je me souviens que lorsque vous utilisez qt, je préfère changer c'est une en-tête principale avec l'avertissement #pragma désactiver et activer à nouveau à la fin à nouveau afin que je puisse toujours voir tous les avertissements pour ma propre source. P>

edit Strong> L'auteur a édité sa question, réponse mise à jour: il n'ya aucun moyen d'obtenir votre code avec des avertissements et du code QT sans avertissements utilisant le compilateur drapeaux: Comment allez-vous dire au compilateur Quel est le code "Votre" code? P> Notez que les drapeaux ci-dessus peuvent également être appliqués au niveau de fichier. Cela vous permettrait donc de désactiver les avertissements pour que ces fichiers dans lesquels vous incluez les en-têtes QT, mais que reste em> signifie que vous ne pouvez pas voir leur pour votre propre code dans ces fichiers. p>

donc je reste avec la réponse ci-dessus; Ce n'est pas assez joli, mais je suis sûr que c'est le seul moyen: utilisez #pragma au début et à la fin de l'en-tête Qt. Soit changer les en-têtes QT (encore plus laids) ou choisissez une manière moins invasive comme ceci: p> xxx pré>

exemple "shottuppqt.h" p> xxx

Exemple "EnaBleAllwarnings.h" P>

#ifdef MSVC
  #pragma warning ( enable : 4222 ) //or default instead of enable
#else
  //....
#endif


5 commentaires

Partie 1: Bonjour, merci pour votre réponse! Je viens de modifier la question pour clarifier ce que je voulais dire. Vous pouvez réellement utiliser #pragma au niveau d'avertissement de poussée / pop à 0 juste lorsque vous y compris les en-têtes problématiques, mais ce n'est pas ce que je cherche. De cette façon, vous obtiendrez des avertissements pour le reste du fichier. Une solution parfaite, sauf que je veux le faire sans modifier de code. (Je ne peux vraiment pas comprendre que ce n'est pas une chose commune à vouloir.) Tout ce que je veux faire est de faire du code portable et de le tester dans des environnements différents sans mettre dans une logique de préprocesseur séparée pour chaque compilateur.


Partie 2: Regardez-regarder -isystem ici: gcc.gnu.org/onlinedocs/gcc-4.4.2/gcc/... en utilisant cette option, vous désactivez efficacement tous les avertissements de tous les fichiers de dir . C'est ainsi que vous dites au compilateur quel est votre code ou plus important; Qu'est-ce que pas votre code.


Il n'y a pas de telle option pour cl, ou du moins pas un document documenté ... "Je ne peux pas vraiment comprendre que ce n'est pas une chose commune à vouloir" -> Eh bien, je ne peux pas comprendre qu'un gros projet comme Qt ne prend pas Soin de GettNG Débarrassez-vous des tonnes d'avertissements qu'il produit.


Oui, je suis d'accord sur cela, mais QT n'était qu'un exemple. En ce moment, Crypto ++ et Python crachent également des avertissements. Et avec un nombre indénombrable de bibliothèques et des dizaines de versions de compilateur / compilateur, des avertissements sont tenus de se produire.


True .. Mais tant que tous les compilateurs ne soutiennent pas les drapeaux comme celui-ci, vous devez gérer les avertissements après tout, soit dans le code, soit dans la sortie du compilateur.



1
votes

0 commentaires

9
votes

à partir de 2017-08-17 Cela semble toujours impossible.

J'ai ajouté une demande de fonctionnalité ici:

https: / /DeveloperCommercommunity.visualstudio.com/content/problem/96411/Impossable-a-ignore-warnings-devrom-librarie.html

Mise à jour 2018:

Le problème est maintenant fermé comme fixé et disponible dans l'installation standard MS VS [ Ici ].

La solution de MS est flexible. Vous pouvez non seulement différencier à l'aide de chemins tels que vous le faites avec - isysem , mais par exemple également par si vous utilisez #include "" ou #include <> < / code>. Le message du blog vaut la peine de voir tous les différents points de personnalisation.


2 commentaires

Le problème est que personne ne l'utilise, de sorte que cela ne sortira jamais de l'état expérimental. L'intégration de CMAKE aiderait à la stimuler: gitlab.kitware.com/cmake/cmake/issues/17904


ça ne fonctionne pas bien avec / analyser



3
votes

ceci existe maintenant sous / expérimental: externe / externe: i system_include_path / externe: w0 . Voir https://blogs.msdn.microsoft. com / vcblog / 2017/12/13 / brisé-avertissements-théorie / pour beaucoup plus de détails.


0 commentaires