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.

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top