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.

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top