Traitement des avertissements d'attelle concernant les fonctions «non utilisées» lorsqu'elles sont transmises en tant que paramètres

StackOverflow https://stackoverflow.com/questions/411726

  •  03-07-2019
  •  | 
  •  

Question

Dans mon programme, le vérificateur splint met en garde:

expat-test.c:23:1: Function exported but not used outside expat-test: start
  A declaration is exported, but not used outside this module. Declaration can
  use static qualifier. (Use -exportlocal to inhibit warning)
   expat-test.c:38:1: Definition of start

La fonction start () est utilisée. Le programme utilise l’analyseur XML expat qui fonctionne avec les rappels. Vous attribuez une fonction à l'analyseur:

XML_SetElementHandler(parser, start, end);

et l'analyseur le rappelle à certains moments. C'est un langage très courant en C et je me demande pourquoi attelle se plaint. Je ne trouve rien dans la FAQ ou dans la manuel .

Était-ce utile?

La solution

Appelez-vous XML_SetElementHandler () dans la même unité de traduction (normalement le fichier source .c) dans lequel start () est défini? Si tel est le cas, l'avertissement peut être correct: ajoutez static à la définition de la fonction et vérifiez si votre application crée toujours des liens sans erreur.

Autres conseils

Le mot clé 'static' masque efficacement le nom d'une fonction aux autres unités de traduction (fichier .C, généralement). Le code est toujours présent et vous pouvez obtenir l'adresse de la fonction à partir de ce fichier C (mais pas à partir d'autres fichiers C). Vous pouvez ensuite transmettre l'adresse à d'autres unités de traduction, en appelant des fonctions, en renvoyant l'adresse d'une fonction ou en la stockant dans une variable globale, etc.

J'ai tendance à déclarer toutes les fonctions qui ne sont pas exportées sous forme statique. On m'a enseigné et je crois actuellement que c'est une bonne pratique de le faire. (Avertissement: comme dans la plupart des cas, il existe de nombreuses exceptions à cette "règle".)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top