ASM in C dà un errore con -std = c99
-
09-09-2019 - |
Domanda
Sono ora disposti a compilare il mio progetto con -std=c99
e sto di fronte a un errore non ci sto capendo per il momento. Questa linea:
my_type* td = ({ register kmy_type* arg0 asm("eax"); arg0; });
mi dà il seguente errore solo in C99:
warning: ISO C forbids nested functions
error: syntax error before ‘asm’
error: ‘arg0’ undeclared (first use in this function)
error: (Each undeclared identifier is reported only once
error: for each function it appears in.)
warning: ISO C forbids braced-groups within expressions
Degli indizi sono invitati ad aiutarmi a capire cosa questo significa. Non ho scritto questa linea e non sono anche sicuro di capire che cosa è il suo scopo.
Soluzione
La linea
my_type* td = ({ register my_type* arg0 asm("eax"); arg0; });
dovrebbe ottenere un valore nel registro eax
, interpretato come un puntatore, nella variabile td
. Tuttavia, si utilizza un sacco di estensioni GNU, in particolare le espressioni dichiarazione e questo uso di asm
(allocazione registro esplicito). Io suggerirei di passare a -std = gnu99 (o come si chiama). In caso contrario, si potrebbe desiderare di giocare con doppia sottolineatura (ad es asm
-.> __asm
). O la parola chiave __extension__
, ma non so se vi aiuterà in modalità C99
Edit: ho appena provato e semplicemente cambiando asm
a __asm
lavori
Altri suggerimenti
asm()
non sembra funzionare con -std=c99
. E 'una cattiva idea, a mio parere, dal momento che lo standard suggerisce in realtà che i compilatori supportano una parola chiave asm()
, ma non è obbligatorio.
Ti suggerisco di usare -pedantic
invece.
Il problema non c'è ASM, si presenta come la sua arg0