我有一个简单的程序:
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
的处理方式?
答案 0 :(得分:3)
为什么使用-std = c99会改变关键字asm的处理方式?
因为asm
关键字不是 C标准的一部分。这是一个GNU扩展。因此,如果没有-std=c99
,gcc会在启用gcc扩展时接受它。 gcc的默认模式模式(未明确指定-std
时)为gnu90
或gnu11
,具体取决于gcc编译器的版本。