2010-09-09 13 views
39

Ho un codice C scritto. Quando compilo su Linux quindi nel file di intestazione che dice il seguente errore: storage class specified for parameter i32 , i8 e così via: classe di memoria specificata per il parametro

typedef int i32; 

typedef char i8; 
+7

Avrai bisogno di mostrare un po 'di codice in più. –

+3

povera domanda, dovrebbe essere aggiornato con il codice errato attuale .. – RushPL

+9

Perché tutti voi criticate? Se la persona sapeva esattamente dove si trova il problema, l'avrebbe riparato, invece di pubblicare lo snippet. O vuoi incollare 10 kLOC? La domanda è in aumento, perché è un problema comune e arcano con una buona risposta accettata. – Vorac

risposta

166

Le probabilità sono che hai dimenticato un punto e virgola in un file di intestazione da qualche parte. Assicurarsi che ogni riga termina in ;

+4

Sei un dio signore !!! –

+0

Grazie mille per aver salvato il mio giorno – gsk

+0

Questo. È probabile che l'errore venga segnalato in un file di codice sorgente che sei sicuro di non aver toccato, ma quel file capita di includere il file di intestazione che presenta l'errore di sintassi. – user149408

13

Avete qualche codice da qualche parte, probabilmente indicato nel testo integrale del messaggio di errore, che fa qualcosa di simile questo:

void function(static int foo) 

Il static non è consentito lì. Potrebbe anche essere un'altra classe di archiviazione, ad esempio register o extern.

3

ho incorsi questo stesso errore una volta. La soluzione consisteva nel cercare i file e cercare le dichiarazioni in sospeso (come una parentesi non chiusa o un punto e virgola mancante). Di solito si tratta di un errore banale, ma il compilatore si lamenta.

La cattiva notizia è che non sempre si lamentano presso la linea giusta La buona notizia è che in questi casi si dice qualcosa di utile come (o anche nel file giusto!):

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

Go e controlla in che altro file segnalato.

6

ho avuto la stessa esperienza. Il problema era nella dichiarazione del prototipo di funzione nel file di intestazione in cui mancava un punto e virgola alla fine della dichiarazione di funzione.

La funzione è stato indicato nei registri di compilazione come "In funzione ..." poco prima che il frammento di errore

Spero che questo aiuti !!

+0

Questo non fornisce una risposta alla domanda. Per criticare o richiedere chiarimenti da un autore, lascia un commento sotto il loro post - puoi sempre commentare i tuoi post, e una volta che hai [reputazione] sufficiente (http://stackoverflow.com/help/whats-reputation) essere in grado di [commentare qualsiasi post] (http://stackoverflow.com/help/privileges/comment). – LPs

+1

@LPs non sono d'accordo - questa è una possibile risposta al problema presentato da OP (infatti, era la risposta che mi serviva). –

0

di aggiungere fino a ;: un altro caso può essere manca un ) in una dichiarazione di puntatore di funzione:

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

(manca parentesi di chiusura dopo *end).

-1

Ho anche avuto la stessa esperienza di mancare il punto e virgola alla fine della dichiarazione di funzione in uno dei miei file di intestazione, per il motivo che ho dovuto affrontare tonnellate di errori, il che mi ha reso poco nervoso. Ho cercato su Google e ho trovato che questo thread mi ha aiutato molto.

Quindi è necessaria una corretta dichiarazione delle funzioni.

0

Se si usa l'editor vim, si può facilmente trovare e virgola mancante digitando:

/[^;]\s*$ 

... e poi saltare su/giù (con N/n), fino a trovare la linea problematica.

Problemi correlati