Abordar las advertencias de la férula sobre las funciones & # 8220; no utilizadas & # 8221; mientras se pasan como parámetros

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

  •  03-07-2019
  •  | 
  •  

Pregunta

En un programa mío, el verificador tablilla advierte:

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

Se utiliza la función de inicio () . El programa utiliza el analizador XML expat que funciona con devoluciones de llamada. Le das una función al analizador:

XML_SetElementHandler(parser, start, end);

y el analizador lo vuelve a llamar en algunos puntos. Este es un lenguaje muy común en C y me pregunto por qué la férula se queja. No encuentro nada en las Preguntas frecuentes o en la manual .

¿Fue útil?

Solución

¿Llama a XML_SetElementHandler () en la misma unidad de traducción (normalmente el archivo fuente .c) en el que se define start () ? Si es así, la advertencia podría ser correcta: agregue static a la definición de la función y verifique si su aplicación aún se enlaza sin errores.

Otros consejos

La palabra clave 'estática' oculta efectivamente el nombre de una función de otras unidades de traducción (generalmente el archivo .C). El código aún está allí, y de ese archivo C puede obtener la dirección de la función (pero no de otros archivos C). Luego puede pasar la dirección a otras unidades de traducción, ya sea llamando a funciones, o devolviendo la dirección desde una función, o almacenándola en una variable global, etc.

Tiendo a declarar todas las funciones que no se exportan como estáticas. Me han enseñado y actualmente creo que es una buena práctica hacerlo. (Descargo de responsabilidad: como con la mayoría de las cosas, hay numerosas excepciones a esta "regla".)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top