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

为什么gcc-std=c99将关键字asm视为一个函数?,gcc,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-declarat

我有一个简单的程序:

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编译器的版本

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


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

出于某种原因,我误以为
asm
是语言中的一个关键字,而参数的解释则留给编译器。感谢您的澄清。出于某种原因,我错误地认为,
asm
是语言中的一个关键字,而参数的解释权留给了编译器。谢谢你的澄清。