Addressing Schiene Warnungen über Funktionen „nicht verwendet“, während sie als Parameter übergeben werden
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 .
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‘).