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.

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top