为什么gcc -std = c99将关键字asm视为函数?

时间:2016-01-29 17:27:46

标签: gcc

我有一个简单的程序:

int main() {
   asm ("movl    $-2, %ecx");
   return 0;
}

当我使用

构建程序时
gcc soc.c

它构建文件没有任何问题。但是,当我用

构建它时
gcc -std=c99 soc.c

我收到以下错误消息。

soc.c: In function ‘main’:
soc.c:2:4: warning: implicit declaration of function ‘asm’ [-Wimplicit-function-declaration]
    asm ("movl    $-2, %ecx");
    ^
/cygdrive/c/Users/rsahu/AppData/Local/Temp/ccEMHjZ4.o:soc.c:(.text+0x15): undefined reference to `asm'
/cygdrive/c/Users/rsahu/AppData/Local/Temp/ccEMHjZ4.o:soc.c:(.text+0x15): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `asm'
collect2: error: ld returned 1 exit status

为什么使用-std=c99会更改关键字asm的处理方式?

1 个答案:

答案 0 :(得分:3)

  

为什么使用-std = c99会改变关键字asm的处理方式?

因为asm关键字不是 C标准的一部分。这是一个GNU扩展。因此,如果没有-std=c99,gcc会在启用gcc扩展时接受它。 gcc的默认模式模式(未明确指定-std时)为gnu90gnu11,具体取决于gcc编译器的版本。