ASM em C dá um erro com -std = c99
-
09-09-2019 - |
Pergunta
Agora estou disposto a compilar meu projeto com -std=c99
e eu estou enfrentando um erro eu não estou entendendo para o momento. Esta linha:
my_type* td = ({ register kmy_type* arg0 asm("eax"); arg0; });
me dá o seguinte erro apenas no 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
Qualquer pistas são bem-vindos para me ajudar a entender o que isso significa. Eu não escrevi essa linha e eu sou também não tem certeza de entender o que é o seu propósito.
Solução
A linha
my_type* td = ({ register my_type* arg0 asm("eax"); arg0; });
deve obter um valor no registo eax
, interpretado como um ponteiro, na variável td
. No entanto, ele usa muitas extensões GNU, particularmente expressões declaração e esse uso de asm
(alocação registo explícito). Eu sugiro que você mude para -std = gnu99 (ou o que é chamado). Caso contrário, você pode querer jogar com sublinhados duplos (eg asm
-.> __asm
). Ou da palavra chave __extension__
, mas eu não sei se ele vai ajudar no modo c99
Edit:. Eu apenas tentei isso e simplesmente mudando asm
a obras __asm
Outras dicas
asm()
não parece trabalho com -std=c99
. É uma má idéia, na minha opinião, uma vez que o padrão de fato sugere que compiladores apoiar uma palavra-chave asm()
, mas não é obrigatório.
Eu sugiro que você use -pedantic
vez.
O problema não existe asm, parece que o seu arg0