>我有一个简单的程序:
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
时)是gnu90
或gnu11
,具体取决于 gcc 编译器的版本。