Addressing Schiene Warnungen über Funktionen „nicht verwendet“, während sie als Parameter übergeben werden

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

  •  03-07-2019
  •  | 
  •  

Frage

Auf einem Programm von mir, der Schiene checker warnt:

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

Die start () Funktion ist verwendet. Das Programm verwendet den Expat XML-Parser, der mit Rückrufen funktioniert. Sie geben dem Parser eine Funktion:

XML_SetElementHandler(parser, start, end);

und der Parser ruft es an einigen Stellen zurück. Dies ist ein sehr häufiges Idiom in C und ich frage mich, warum Schiene beschwert. Ich finde nichts in dem FAQ oder in dem Handbuch .

War es hilfreich?

Lösung

Rufen Sie XML_SetElementHandler() in derselben Übersetzungseinheit (in der Regel der .c-Quelldatei), in dem start() definiert? Wenn ja, könnte die Warnung richtig sein. static auf die Funktionsdefinition hinzufügen und überprüfen, ob Ihre Anwendung verknüpft noch ohne Fehler

Andere Tipps

Die ‚statische‘ Stichwort verbirgt sich effektiv den Namen einer Funktion von anderen Übersetzungseinheiten (.C-Datei, in der Regel). Der Code ist immer noch da, und von dieser C-Datei können Sie die Adresse der Funktion (aber nicht von anderen C-Dateien) erhalten. Anschließend können Sie die Adresse mit anderen Übersetzungseinheiten übergeben, entweder durch den Aufruf von Funktionen oder die Adresse von einer Funktion zurückkehren, oder indem sie sie in einer globalen Variablen speichern, etc.

Ich neige dazu, alle Funktionen zu erklären, die nicht als statische exportiert werden. Ich habe gelernt, und zur Zeit glaube, dass es eine gute Praxis, dies zu tun ist. (Disclaimer: Wie bei den meisten Dingen gibt es zahlreiche Ausnahmen von dieser ‚Regel‘).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top