ASM en C da un error con -std = c99
-
09-09-2019 - |
Pregunta
Ahora estoy dispuesto a compilar mi proyecto con -std=c99
y estoy frente a un error que no soy la comprensión por el momento. Esta línea:
my_type* td = ({ register kmy_type* arg0 asm("eax"); arg0; });
me da el siguiente error sólo en 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
¿Pistas son bienvenidos para ayudarme a entender lo que esto significa. No he escrito esta línea y tampoco estoy seguro de entender lo que es su propósito.
Solución
La línea
my_type* td = ({ register my_type* arg0 asm("eax"); arg0; });
debería tener un valor en el registro eax
, interpretado como un puntero, en la variable td
. Sin embargo, utiliza una gran cantidad de extensiones de GNU, en particular las expresiones de los estados y este uso de asm
(asignación del registro explícito). Yo sugeriría cambiar a -std = gnu99 (o como se llame). De lo contrario, es posible que desee jugar con doble subrayado (por ejemplo asm
-.> __asm
). O la palabra clave __extension__
, pero no sé si es que va a ayudar en el modo C99
Edit: Yo sólo probé y simplemente cambiando asm
a __asm
obras
Otros consejos
asm()
no parece trabajar con -std=c99
. Es una mala idea en mi opinión, ya que la norma de hecho sugiere que los compiladores soportan una palabra clave asm()
, pero no es obligatorio.
Le sugiero que utilice -pedantic
lugar.
El problema no es asm, se parece a su arg0