4

我现在愿意编译我的项目,-std=c99但我遇到了一个我暂时不理解的错误。这一行:

my_type* td = ({ register kmy_type* arg0 asm("eax"); arg0; });

仅在 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

欢迎任何线索帮助我理解这意味着什么。这行不是我写的,我也不确定它的目的是什么。

4

3 回答 3

12

线

my_type* td = ({ register my_type* arg0 asm("eax"); arg0; });

应该在eax寄存器中获取一个值,解释为一个指针,放入td变量中。然而,它使用了很多 GNU 扩展,特别是语句表达式和这种使用asm(显式寄存器分配)。我建议您切换到 -std=gnu99 (或其他名称)。否则,您可能想使用双下划线(例如asm-> __asm)或__extension__关键字,但我不知道它在 c99 模式下是否有帮助。

编辑:我刚刚尝试过,只是简单地改变asm__asm工作。

于 2009-04-16T10:32:30.100 回答
3

asm()似乎不适用于-std=c99. 在我看来,这是一个坏主意,因为标准实际上建议编译器支持asm()关键字,但这不是强制性的。

我建议你-pedantic改用。

于 2009-04-16T10:25:17.077 回答
-1

那里的问题不是asm,看起来像它的arg0

于 2009-04-16T10:11:09.717 回答