代码之家  ›  专栏  ›  技术社区  ›  claf

C中的asm给出了-std=c99的错误。

  •  4
  • claf  · 技术社区  · 15 年前

    我现在愿意用 -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
    

    任何线索都可以帮助我理解这意味着什么。我没有写这行,我也不确定它的目的是什么。

    3 回复  |  直到 15 年前
        1
  •  12
  •   jpalecek    15 年前

    线

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

    应该在 eax 寄存器,解释为指针,进入 td 变量。但是,它使用了大量的GNU扩展,特别是语句表达式,并且 asm (显式寄存器分配)。我建议你切换到-std=gnu99(或者它的名字)。否则,您可能需要使用双下划线(例如 ASM -gt; __asm __extension__ 关键字,但我不知道它在C99模式下是否有帮助。

    编辑:我刚试过,只是改变一下 ASM 阿斯马 作品。

        2
  •  2
  •   Bastien Léonard    15 年前

    asm() 似乎不适合 -std=c99 . 我认为这是个坏主意,因为标准实际上建议编译器支持 ASM-() 关键字,但它不是必需的。

    我建议你用 -pedantic 相反。

        3
  •  -1
  •   Arkaitz Jimenez    15 年前

    没有ASM的问题,看起来像它的arg0