为什么 gcC语言 std=c99 将关键字 asm 视为一个函数



>我有一个简单的程序:

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的处理方式?

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

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

最新更新