Indirizzare gli avvisi splint sulle funzioni "non utilizzate" mentre vengono passate come parametri

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

  •  03-07-2019
  •  | 
  •  

Domanda

Su un mio programma, il checker splint avverte:

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

Viene utilizzata la funzione start () . Il programma utilizza il parser XML expat che funziona con i callback. Dai una funzione al parser:

XML_SetElementHandler(parser, start, end);

e il parser lo richiama in alcuni punti. Questo è un linguaggio molto comune in C e mi chiedo perché la stecca si lamenta. Non trovo nulla nelle FAQ o nelle manuale .

È stato utile?

Soluzione

Chiami XML_SetElementHandler () nella stessa unità di traduzione (normalmente il file sorgente .c) in cui è definito start () ? In tal caso, l'avviso potrebbe essere corretto: aggiungi statico alla definizione della funzione e controlla se l'applicazione continua a collegarsi senza errori.

Altri suggerimenti

La parola chiave 'statica' nasconde efficacemente il nome di una funzione da altre unità di traduzione (file .C, di solito). Il codice è ancora lì e da quel file C è possibile ottenere l'indirizzo della funzione (ma non da altri file C). Puoi quindi passare l'indirizzo ad altre unità di traduzione, chiamando le funzioni o restituendo l'indirizzo da una funzione o memorizzandolo in una variabile globale, ecc.

Tendo a dichiarare tutte le funzioni che non vengono esportate come statiche. Mi è stato insegnato e attualmente credo che sia una buona pratica farlo. (Dichiarazione di non responsabilità: come nella maggior parte dei casi, esistono numerose eccezioni a questa "regola".)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top