Dirigindo-se advertências tala sobre as funções “não utilizadas”, enquanto eles são passados ??como parâmetros

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

  •  03-07-2019
  •  | 
  •  

Pergunta

Em um programa de mim, o verificador tala adverte:

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

A função de arranque () é utilizado. O programa usa o expatriados parser XML que trabalha com retornos de chamada. Você dá o analisador uma função:

XML_SetElementHandler(parser, start, end);

eo analisador chama-lo de volta em alguns pontos. Este é um estilo muito comum em C e eu me pergunto por tala reclama. I encontrar nada no FAQ ou na manual do .

Foi útil?

Solução

Você chama XML_SetElementHandler() na mesma unidade de tradução (normalmente o arquivo de origem .c) em que start() está definido? Se assim for, o aviso pode ser correto:. Add static para a definição da função e verifique se o seu aplicativo ainda links sem erros

Outras dicas

O 'estático' palavra-chave efetivamente esconde o nome de uma função de outras unidades de tradução (arquivo .C, geralmente). O código ainda está lá, ea partir desse arquivo C você pode obter o endereço da função (mas não de outros arquivos C). Você pode, então, passar o endereço para outras unidades de tradução, quer chamando funções, ou devolver o endereço de uma função, ou armazenando-o em uma variável global, etc.

I tendem a declarar todas as funções que não estão sendo exportados como estático. Foi-me ensinado e atualmente acreditam que é uma boa prática para fazê-lo. (Aviso: Tal como acontece com a maioria das coisas, existem inúmeras excepções a esta 'regra'.)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top