2016-01-29 19 views
0

我有一個簡單的程序:爲什麼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被處理?

回答

3

爲什麼使用-std = c99會改變關鍵字asm的處理方式?

由於asm關鍵字是不是C標準的一部分。這是一個GNU擴展。因此,如果沒有-std=c99,gcc接受它,因爲啓用了gcc擴展。 gcc的默認模式模式(當-std未明確指定時)爲gnu90gnu11,具體取決於gcc編譯器的版本。

+0

出於某種原因,我是錯誤的印象,即'asm'是在語言的關鍵字,和參數的解釋是留給下編譯。感謝您的澄清。 –

相關問題