2014-04-08 42 views
2

C編程的新手。
在gcc -std中設置編譯的C標準,例如, gcc -std=c99
可以知道當前設置了哪個C標準?如何在gcc中獲得當前的c方言?

+0

http://stackoverflow.com/questions/14737104/what-is-the-default-c-mode-for-the-current-gcc-especially-on-ubuntu – ooga

+0

@ooga你是對的,這是完全一樣的問題。然而,在所有的答案中,我找到了如何設置C標準,而不是如何檢索它。 – Salvador

回答

2

您可以使用此程序打印默認:

#include <stdio.h> 

int main() { 
#ifdef __STRICT_ANSI__ 
    printf("c"); 
#else 
    printf("gnu"); 
#endif 

#ifdef __STDC_VERSION__ 
    #if __STDC_VERSION__ == 199901L 
    puts("99"); 
    #elif __STDC_VERSION__ == 201112L 
    puts("11"); 
    #else 
    puts("(unknown)"); 
    #endif 
#else 
    puts("90"); 
#endif 
    return 0; 
} 
4

在各種模式下有各種預處理符號。您可以使用gcc -E -dM -x c /dev/null來獲取預定義的所有預處理器符號的轉儲。

當處於C99模式(-std=c99-std=gnu99)時,符號__STDC_VERSION__被定義爲199901L。在C11模式(-std=c11std=gnu11),這是201112L

當嚴格C模式(-std=cXX相對於-std=gnuXX),符號__STRICT_ANSI__被定義爲1

+0

'gcc -E -dM'給我_gcc:致命錯誤:沒有輸入文件。在Ubuntu和Windows中編譯終止。 – Salvador

+0

@Salvador:是的,你需要給編譯器驅動程序至少一個輸入文件,以便它知道要編譯哪種語言。你可以給它任何現有的文件,或者創建一個帶'.c'或'.cpp'擴展名的空文件。 –

+0

對不起,新手需要準備好使用代碼作爲'echo | cpp -dM'轉儲相同的預定義預處理器設置(並且不需要文件來編譯)。 – Salvador

相關問題