Ho recentemente appreso come programmare i conducenti carattere semplice e mentre gioca con il codice che ho notato che ho un sacco di le seguenti avvertenze GCC gettato per il mio codice C99:Come compilare un modulo del kernel Linux usando -std = gnu99?
warning: ISO C90 forbids mixed declarations and code
Presumo che ciò è dovuto al fatto il makefile del kernel Linux principale viene impostato per la compilazione utilizzando uno standard non C99. Ho cercato in giro ho trovato questa risposta qui su StackOverflow: How to use make and compile as C99?
così ho provato, naturalmente, il seguente nel mio Makefile:
ccflags-y := -std=gnu99
Purtroppo questo non tacere gli avvertimenti del GCC. Ho controllato l'output dettagliato di make
e verificato che GCC sia effettivamente eseguito con il -std=gnu99
attaccato alla fine; quindi sono un po 'confuso.
Come si compila correttamente un modulo del kernel Linux utilizzando l'opzione -std=gnu99
?
EDIT:
ho notato l'uscita GCC mostra questa opzione: -Wdeclaration-after-statement
. È per questo che sto ricevendo gli avvertimenti anche con l'opzione -std=gnu99
?
Il makefile Linux è intially chiamato prima il modulo, in modo da GCC potrebbe ottenere misto std = definizioni. – stdcall
Perché non si dichiarano tutte le variabili all'inizio della funzione e si elimina l'avviso in questo modo? – Gonzalo
Ciò è probabilmente dovuto al fatto che quella caratteristica di C99 (dichiarazione dopo dichiarazione) è una delle cose che Linus sembra odiare. Quindi lo stile di codifica di Linux lo proibisce. –