J'aimerais savoir quel commutateur vous passez au compilateur gcc pour désactiver les avertissements de variables inutilisées? 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 les deux -Wunused-value
et -Wno-unused-value
mais aucun n'a 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 cela -Wall
dépasse mon objectif?
c++
gcc
compiler-warnings
compiler-flags
WilliamKF
la source
la source
-Werror=no-unused-variable
Réponses:
Le
-Wno-unused-variable
commutateur fait généralement l'affaire. Cependant, c'est un avertissement très utile si vous vous souciez de ces choses dans votre projet. Cela devient ennuyeux quand GCC commence à vous avertir de choses qui ne sont pas dans votre code.Je vous recommande de garder l'avertissement activé, mais d'utiliser
-isystem
au lieu de-I
pour inclure les répertoires de projets tiers. Ce drapeau dit à GCC de ne pas vous avertir des choses sur lesquelles vous n'avez aucun contrôle.Par exemple, au lieu de
-IC:\\boost_1_52_0
, disons-isystem C:\\boost_1_52_0
.J'espère que ça aide. Bonne chance!
la source
-Wno-unused-parameter
pour les paramètres de fonction inutilisés,-Wno-unused-function
pour les fonctions inutilisées-Wno-unused-but-set-variable -Wno-unused-parameter -Wno-unused-variable
Parfois, vous avez juste besoin de supprimer uniquement certains avertissements et vous voulez conserver d'autres avertissements, juste pour être sûr. Dans votre code, vous pouvez supprimer les avertissements pour les variables et même les paramètres formels en utilisant l' attribut non utilisé de GCC . Disons que vous avez cet extrait de code:
Il peut y avoir une situation où vous devez utiliser cette fonction comme gestionnaire - ce qui (à mon humble avis) est assez courant dans la bibliothèque C ++ Boost. Ensuite, vous avez besoin de la deuxième version de paramètre formel , de sorte que la signature de la fonction est la même que le modèle requis par le gestionnaire, sinon la compilation échouerait. Mais vous n'en avez pas vraiment besoin non plus dans la fonction elle-même ...
La solution pour marquer la variable ou le paramètre formel à exclure des avertissements est la suivante:
GCC a de nombreux autres paramètres, vous pouvez les vérifier dans les pages de manuel . Cela fonctionne également pour les programmes C, pas seulement pour C ++, et je pense qu'il peut être utilisé dans presque toutes les fonctions, pas seulement les gestionnaires. Allez-y et essayez-le! ;)
PS: Dernièrement, j'ai utilisé ceci pour supprimer les avertissements de sérialisation de Boosts dans un modèle comme celui-ci:
EDIT: Apparemment, je n'ai pas répondu à votre question comme vous en aviez besoin, drak0sha l'a fait mieux. C'est parce que j'ai principalement suivi le titre de la question, mon mauvais. J'espère que cela pourrait aider d'autres personnes, qui arrivent ici à cause de ce titre ... :)
la source
void func(unsigned number, const int)
. Ensuite, gcc ne se plaindra pas non plus de l'inutiliséversion
.gcc
version que vous utilisez. IIRC, j'ai dû l'utiliser il y a 4 ans, pour supprimer les avertissements de non-utilisationversion
. ;)Si vous utilisez gcc et que vous souhaitez désactiver l'avertissement pour le code sélectionné, vous pouvez utiliser la directive du compilateur #pragma:
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.la source
#pragma
directives @ Dee'Kej sont parfaitement sûres si vous les encapsulez dans#ifdef some_compiler ... #endif
. Les avertissements sont une fonctionnalité spécifique au compilateur et ne sont pas définis par la norme. Vous ne pouvez pas supprimer les avertissements du code sans#pragma
s.Voir
man gcc
sous Options d'avertissement. Là, vous avez tout un tas deunused
Si vous préfixez l'un d'entre eux avec
no-
, cela désactivera cet avertissement.Des explications plus détaillées peuvent être trouvées dans Options pour demander ou supprimer les avertissements
la source
L'utilisation
-Wno-unused-variable
devrait fonctionner.la source
-Wno-error=unused-variable
si vous souhaitez supprimer l'erreur et conserver l'avertissement.[-Werror=unused-variable]
.Le compilateur vous le dit déjà, ce n'est pas
value
maisvariable
. Vous recherchez-Wno-unused-variable
. Essayez égalementg++ --help=warnings
de voir une liste des options disponibles.la source
Vous visitez Trac de Boost et déposez un rapport de bogue contre Boost.
Votre application n'est pas responsable de la suppression des avertissements et des erreurs de la bibliothèque. La bibliothèque est responsable de la suppression de ses propres avertissements et erreurs.
la source
-Wall
et-Wextra
prépare le terrain dans GCC et le suivant-Wno-unused-variable
peut ne pas prendre effet. Par exemple, si vous avez:CFLAGS += -std=c99 -pedantic -pedantic-errors -Werror -g0 -Os \ -fno-strict-overflow -fno-strict-aliasing \ -Wall -Wextra \ -pthread \ -Wno-unused-label \ -Wno-unused-function \ -Wno-unused-parameter \ -Wno-unused-variable \ $(INC)
alors GCC voit l'instruction
-Wall -Wextra
et semble ignorer-Wno-unused-variable
Cela peut ressembler à ceci ci-dessous et vous obtenez l'effet souhaité de ne pas être arrêté dans votre compilation sur la variable inutilisée:
CFLAGS += -std=c99 -pedantic -pedantic-errors -Werror -g0 -Os \ -fno-strict-overflow -fno-strict-aliasing \ -pthread \ -Wno-unused-label \ -Wno-unused-function \ $(INC)
Il y a une bonne raison pour laquelle on l'appelle un "avertissement" par rapport à une "erreur". Échouer la compilation simplement parce que votre code n'est pas complet (disons que vous supprimez l'algorithme) peut être un échec.
la source
Il affiche des avertissements, mais continue avec la construction
la source