这是由C99标准明确定义的吗?

时间:2015-09-13 22:17:28

标签: c

即使我的程序中没有main函数,我也通过定义main来使链接器满意。这是否符合C99标准?

void foo()
{
    __asm__ (".globl main\n\n"
        "main:\n"
        "\txorl %eax, %eax\n"
        "\tret");
}

Live example

3 个答案:

答案 0 :(得分:4)

不,C标准没有定义任何内联汇编的行为。

答案 1 :(得分:3)

实施可能会提供__asm__个关键字,但仅作为扩展名。特别是,C99标准列出了信息(非规范)部分中的asm块J.5.10 asm关键字

  

asm关键字可用于直接插入汇编语言   翻译输出(6.8)。最常见的实现是通过a   表格声明:

     

asm ( character-string-literal );

最确切地说,您的程序不是严格符合。从§4/ p5 一致性(强调我的):

  

严格遵守程序 只能使用的那些功能   本国际标准中规定的语言和库。 2)

答案 2 :(得分:2)

C中没有__asm__个关键字,因此使用未在C中定义的关键字的简单事实意味着您的程序不严格符合。