Funktion als statisch deklariert, aber nie definiert
Lesezeit: 2 Minuten
Ich habe eine Header-Datei, angenommen abc.h, wo ich eine Funktionsdeklaration habe als:
static int function1();
Ich habe diese Header-Datei in abc.c eingebunden und die Funktion definiert und verwendet.
static int function1()
{
< function definition>
}
Nach dem Kompilieren bekomme ich eine Warnung:
warning: function1 declared static but never defined
Wie kann ich die Warnung entfernen, ohne Statik zu entfernen. Vielen Dank.
Verschieben Sie die Vorwärtsdeklaration aus dem Header in Ihre Quelldatei?
– Simonc
28. März 2013 um 12:10 Uhr
Wenn eine Funktion ist staticsollten Sie es nicht in eine Header-Datei einfügen (es sei denn inline)…
– Benutzer529758
28. März 2013 um 12:11 Uhr
@H2CO3 oder privater Header
– SomeWittyBenutzername
28. März 2013 um 12:14 Uhr
Entfernen Sie das statische Schlüsselwort aus der Funktionsdefinition – es ist dort überflüssig. Obwohl dies sowieso hätte funktionieren sollen – ich nehme an, das Problem liegt woanders.
– SomeWittyBenutzername
28. März 2013 um 12:17 Uhr
Achten Sie auch auf die () in C. In a Erklärung Das bedeutet, dass die Funktion jede Art von Argumenten erhalten kann. Insbesondere gilt dies nicht als Prototyp der Funktion. Für die Definition es bedeutet eine Funktion, die überhaupt keinen Parameter erhält. In C sollten Sie immer verwenden (void) stattdessen.
– Jens Gustedt
28. März 2013 um 14:09 Uhr
Eine statische Funktion kann in einer Header-Datei deklariert werden, aber dies würde dazu führen, dass jede Quelldatei, die die Header-Datei enthält, ihre eigene private Kopie der Funktion hat, was wahrscheinlich nicht beabsichtigt ist.
Sind Sie sicher, dass Sie die nicht aufgenommen haben abc.h Datei in anderen .c-Dateien?
Denn um eine Funktion als statisch zu deklarieren, muss die Funktion in definiert werden alle .c-Datei(en), in der es enthalten ist.
Ich hatte das gleiche Problem. Offensichtlich sollte ich die statischen Deklarationen nur in der .c-Datei und nicht in der Header-Datei haben. Haha 😀
– Antonio CS
1. Juli 2013 um 22:25 Uhr
Ehsan
Gute Praxis: Deklarieren Sie statische Funktionen in der Quelldatei, in der sie definiert sind (bitte geben Sie auch einen Prototyp an), da dies die einzige Datei ist, in der sie sichtbar sind.
Auf diese Weise ist die Funktion nur für diese Datei sichtbar, solche Sichtbarkeitsprobleme können mögliche Codekonflikte reduzieren! Geben Sie also einfach den Prototyp und die statische Funktionsdefinition in der .c-Datei an. Fügen Sie die statische Funktion nicht in die Header-Datei ein; Die .h-Datei ist für den externen Gebrauch bestimmt.
Duplizieren: Statische Funktionen in C
14125300cookie-checkFunktion als statisch deklariert, aber nie definiertyes
Verschieben Sie die Vorwärtsdeklaration aus dem Header in Ihre Quelldatei?
– Simonc
28. März 2013 um 12:10 Uhr
Wenn eine Funktion ist
static
sollten Sie es nicht in eine Header-Datei einfügen (es sei denninline
)…– Benutzer529758
28. März 2013 um 12:11 Uhr
@H2CO3 oder privater Header
– SomeWittyBenutzername
28. März 2013 um 12:14 Uhr
Entfernen Sie das statische Schlüsselwort aus der Funktionsdefinition – es ist dort überflüssig. Obwohl dies sowieso hätte funktionieren sollen – ich nehme an, das Problem liegt woanders.
– SomeWittyBenutzername
28. März 2013 um 12:17 Uhr
Achten Sie auch auf die
()
in C. In a Erklärung Das bedeutet, dass die Funktion jede Art von Argumenten erhalten kann. Insbesondere gilt dies nicht als Prototyp der Funktion. Für die Definition es bedeutet eine Funktion, die überhaupt keinen Parameter erhält. In C sollten Sie immer verwenden(void)
stattdessen.– Jens Gustedt
28. März 2013 um 14:09 Uhr