253 votes

avertissements de paramètre inutilisé dans le code C

Ce qui est le meilleur moyen pour supprimer l’avertissement « paramètre inutilisé » dans le code C.

Par exemple,

En C++, j’ai été en mesure de mettre un `` Commentaire autour des paramètres. Mais pas dans C bien sûr.

Il me donne `` .

Quelques conseils seraient appréciés.

363voto

Job Points 8339

J’ai l’habitude d’écrire une macro comme ceci :

Vous pouvez utiliser cette macro pour tous vos paramètres inutilisés. (Notez que cela fonctionne sur n’importe quel compilateur.)

Par exemple :

139voto

Philip Potter Points 6152

Dans gcc, vous pouvez étiqueter le paramètre avec le `` attribut.

70voto

ideasman42 Points 1682

Vous pouvez utiliser gcc/clang inutilisée attribut, cependant je utiliser ces macros dans un en-tête pour éviter d'avoir gcc attributs spécifiques à tous les plus de la source, ayant également __attribute__ partout c'est un peu verbeux/laid.

#ifdef __GNUC__
#  define UNUSED(x) UNUSED_ ## x __attribute__((__unused__))
#else
#  define UNUSED(x) UNUSED_ ## x
#endif

#ifdef __GNUC__
#  define UNUSED_FUNCTION(x) __attribute__((__unused__)) UNUSED_ ## x
#else
#  define UNUSED_FUNCTION(x) UNUSED_ ## x
#endif

Ensuite, vous pouvez faire...

void foo(int UNUSED(bar)) { ... }

et pour les fonctions...

static void UNUSED_FUNCTION(foo)(int bar) { ... }

Je préfère ce parce que vous obtenez un message d'erreur si vous essayez d'utiliser bar dans le code n'importe où, alors vous ne pouvez pas quitter l'attribut par erreur.


Remarque: pour autant que je sais, MSVC n'a pas d'équivalent à __attribute__((__unused__)).

Note:
L' UNUSED macro ne fonctionne pas pour les arguments qui contiennent des parenthèses,
donc, si vous avez un argument comme float (*coords)[3] vous ne pouvez pas le faire,
float UNUSED((*coords)[3]) ou float (*UNUSED(coords))[3], C'est le seul inconvénient de l' UNUSED macro que j'ai trouvé jusqu'à présent, dans ces cas-je revenir à l' (void)coords;

24voto

Teddy Points 63

Avec gcc avec l’attribut non utilisé :

5voto

user2452561 Points 11
<pre><code></code><p>et en utilisant le vide (x), nous ajoutons un rétroprojecteur dans le traitement.</p><pre><code></code></pre><p>Remarque : Il s’agit juste de supprimer l’avertissement pas pour l’optimisation.</p></pre>

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