110 votes

Comment désactiver les avertissements de variable inutilisés sortant de gcc?

Je voudrais savoir quel commutateur vous passez au compilateur gcc pour désactiver les avertissements de variables inutilisés? Je reçois des erreurs de boost sur Windows et je ne veux pas toucher au code de boost:

 C:\boost_1_52_0/boost/system/error_code.hpp: At global scope:
C:\boost_1_52_0/boost/system/error_code.hpp:214:36: error: 'boost::system::posix_category' defined but not used [-Werror=unused-variable]
C:\boost_1_52_0/boost/system/error_code.hpp:215:36: error: 'boost::system::errno_ecat' defined but not used [-Werror=unused-variable]
C:\boost_1_52_0/boost/system/error_code.hpp:216:36: error: 'boost::system::native_ecat' defined but not used [-Werror=unused-variable]
 

J'ai essayé d'utiliser à la fois -Wunused-value et -Wno-unused-value mais je n'ai pas supprimé les messages ci-dessus.

Quelle est la bonne commande, voici ma ligne de compilation:

 g++  -g -fno-inline -Wall -Werror -Wextra -Wfloat-equal -Wshadow
-Wpointer-arith -Wcast-qual -Wcast-align -Wwrite-strings -Wno-conversion 
-Wdisabled-optimization -Wredundant-decls -Wunused-value -Wno-deprecated 
-IC:\\boost_1_52_0 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 
-c -o op.o op.cpp
 

Peut-être que -Wall annule mon objectif?

93voto

Dee'Kej Points 51

Parfois, vous avez juste besoin de supprimer seulement quelques mises en garde et vous voulez garder les avertissements d'autres, juste pour être sûr. Dans votre code, vous pouvez supprimer les avertissements pour les variables et les même paramètres formels par l'aide de GCC inutilisés attribut. Disons que vous avez de ce bout de code:

void func(unsigned number, const int version)
{
  unsigned tmp;
  std::cout << number << std::endl;
}

Il y a peut être une situation, quand vous en avez besoin pour utiliser cette fonction en tant que gestionnaire - qui (à mon humble avis) est assez fréquent en C++ de la bibliothèque Boost. Ensuite, vous devez le deuxième paramètre formel de la version, de sorte que la fonction de la signature est la même que le modèle le gestionnaire exige, sinon la compilation échoue. Mais vous n'avez pas vraiment besoin dans la fonction elle-même, soit...

La solution de la façon de marquer la variable ou le paramètre formel à être exclus de l'avertissement est ceci:

void func(unsigned number, const int version __attribute__((unused)))
{
  unsigned tmp __attribute__((unused));
  std::cout << number << std::endl;
}

GCC a de nombreux autres paramètres, vous pouvez les vérifier dans les pages de man. Ceci fonctionne également pour les programmes en C, pas en C++, et je pense qu'il peut être utilisé dans presque toutes les fonctions, et pas seulement les gestionnaires. Aller de l'avant et de l'essayer! ;)

P. S.: Dernièrement, j'ai utilisé ceci pour supprimer les avertissements de Booste' sérialisation dans le modèle comme celui-ci:

template <typename Archive>
void serialize(Archive &ar, const unsigned int version __attribute__((unused)))

EDIT: Apparemment, je n'ai pas la réponse à votre question que vous avez besoin, drak0sha faire mieux. C'est parce que j'ai principalement suivi le titre de la question, mon mauvais. J'espère que cela peut aider d'autres personnes, qui sont ici en raison de ce titre... :)

73voto

Ole Wolf Points 126

Si vous utilisez gcc et souhaitez désactiver l'avertissement pour le code sélectionné, vous pouvez utiliser la directive #pragma compiler:

 #pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-variable"
( your problematic library includes )
#pragma GCC diagnostic pop
 

Pour le code que vous contrôlez, vous pouvez également utiliser __attribute__((unused)) pour indiquer au compilateur que des variables spécifiques ne sont pas utilisées.

18voto

Olaf Dietsche Points 35264

Voir man gcc sous Options d’alerte. Là vous avez tout un tas de unused

Options d'avertissement
... -Wunused -Wunused-function -Wunused-label -Wunused-paramètre -Wunused-value -Wunused-variable -Wunused-but-set-paramètre -Wunused-but-set-variable

Si vous préfixez l'un d'eux avec no- , cet avertissement sera désactivé.

12voto

Mats Petersson Points 70074

Utilisez -Wno-unused-variable devrait fonctionner.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X