2010-09-09 15 views
39

Ich habe einen C-Code geschrieben. Wenn ich es auf Linux dann in der Header-Datei kompilieren sagt es die folgende Fehlermeldung: storage class specified for parameter i32 , i8 und so weiterFehler: Speicherklasse für Parameter

typedef int i32; 

typedef char i8; 
+7

Sie müssen etwas mehr Code zeigen. –

+3

schlechte Frage, sollte mit dem tatsächlichen schlechten Code aktualisiert werden .. – RushPL

+9

Warum kritisieren Sie alle? Wenn die Person wüsste, wo genau das Problem liegt, hätten sie es behoben, anstatt das Snippet zu veröffentlichen. Oder willst du 10 kLOC einfügen? Die Frage wird aufgefrischt, weil es ein allgemeines und geheimnisvolles Problem mit einer gut akzeptierten Antwort ist. – Vorac

Antwort

166

Wahrscheinlich haben Sie ein Semikolon in einer Headerdatei irgendwo vergessen. Stellen Sie sicher, dass jede Zeile in ;

+4

Sie sind ein Gott, Sir !!! –

+0

Vielen Dank für die Rettung meines Tages – gsk

+0

Dies. Der Fehler wird wahrscheinlich in einer Quellcodedatei gemeldet, von der Sie sicher sind, dass Sie sie nicht berührt hat. Diese Datei enthält jedoch die Headerdatei mit dem Syntaxfehler. – user149408

13

Sie haben einen Code irgendwo, wahrscheinlich im vollständigen Text der Fehlermeldung angezeigt, die etwas tut, wie dies:

void function(static int foo) 

Die static ist dort nicht erlaubt. Es könnte auch eine andere Speicherklasse sein, wie register oder extern.

3

endet Ich habe diesen gleichen Fehler einmal aufgetreten. Die Lösung bestand darin, Dateien zu durchsuchen und nach ausstehenden Anweisungen zu suchen (wie eine nicht geschlossene Klammer oder ein fehlendes Semikolon). Normalerweise ist es wirklich ein trivialer Fehler, aber der Compiler beklagt sich.

Die schlechte Nachricht ist, dass es nicht immer an der richtigen Linie beschwert Die gute Nachricht ist, dass in diesen Fällen sagt es etwas Nützliches wie (oder sogar in der richtigen Datei!):

WRONGFILE.h: In function ‘FUNCTION_OF_ANOTHER_FILE_WRT_WRONG_FILE’" 
WRONGFILE:line:col: error: storage class specified for parameter ‘param’ before. 

Go und checke die andere gemeldete Datei ein.

6

Ich hatte die gleiche Erfahrung. Das Problem war bei der Funktion Prototyp-Deklaration in der Header-Datei, wo ein Semikolon am Ende der Funktionsdeklaration fehlte.

Die Funktion wurde in der Zusammenstellung Protokollen als „In-Funktion ...“ kurz vor dem Fehler-Schnipsel

this helps angezeigt !!

+0

Dies liefert keine Antwort auf die Frage. Um einen Autor zu kritisieren oder um Klärung zu bitten, hinterlasse einen Kommentar unter seinem Beitrag - du kannst deine eigenen Beiträge jederzeit kommentieren, und sobald du genügend [Reputation] (http://stackoverflow.com/help/whats-reputation) hast, wirst du das tun in der Lage sein [jeden Beitrag kommentieren] (http://stackoverflow.com/help/privileges/comment). – LPs

+1

@LPs stimme ich nicht zu - das ist eine mögliche Antwort auf das Problem von OP (in der Tat war es die Antwort, die ich brauchte). –

0

Um oben auf ; hinzufügen: ein weiteren Fall kann eine fehlendes ) in einem Funktionszeiger Erklärung sein:

extern void init_callbacks(void (*init)(), void (*end()); 

(fehlende schließende Klammer nach *end).

-1

Ich hatte auch die gleiche Erfahrung fehlendes Semikolon am Ende der Funktionsdeklaration in einer meiner Header-Dateien, aus dem Grund ich konfrontiert Tonnen von Fehlern, die mich etwas nervös gemacht. Ich habe gegoogelt und gefunden, dass dieser Thread mir sehr geholfen hat.

So ist die ordnungsgemäße Erklärung der Funktionen notwendig.

0

Wenn Sie vim-Editor verwenden, können Sie einfach Semikolon fehlt, indem Sie finden:

/[^;]\s*$ 

... und dann springen nach oben/unten (mit N/n), bis problematische Zeile gefunden wird.

Verwandte Themen