[Linux C]-GCC編譯 C與C++ C89與C99
[Linux C]-GCC編譯 C與C++ C89與C99
拷貝來源:http://hi.baidu.com/zzcqh/item/c76fc92e99fac20842634a1e
Q:gcc的全稱是什麼:
A: gcc 是 gnu compiler collection(gnu 編譯器套裝),它不僅僅只是編譯c語言的編譯器,它提供了對c、面向物件的c(object c), C++, java, Ada 語言的編譯服務。過去有一段時間,它被成為gnu C compiler是因為它最初的開發目的的確是只提供了c編譯功能,但是現在已經不在是這樣了。
Q:gcc 和g++什麼關係
A:事實上只有一個C++編譯器,那就是g++。g++不僅僅是一個C++預處理器,而是一個實實在在的C++編譯器。由於它的名字 GNU C++ Compiler 也能縮寫成GCC,所以有時候有人叫它gcc也並不錯。而我們通常所說的gcc是一個編譯器套裝,gcc命令只是一個調用各個實際編譯器的快捷方式而已。
Q:gcc所支援的C語言規範有哪些
A: 目前主要的C語言規範有c89(c90), c95(94)和c99。C89是最早的C語言規範,於89年提出,90年先由美國國家標準局推出ANSI版本,後來被接納為ISO國際標準 (ISO/IEC 9899:1990),因而有時也稱為c90。但在94和96年分別對c90進行了兩次錯誤修正,gcc支援的是修正後的c89(90)版本的C語言規範。在95年提出過對90版規範的修訂案,稱為 C95或者AMD1。gcc也支援c95規範。最新的一次C規範修訂在99年制定(ISO/IEC 9899:1999),即常稱的C99規範。在2001年對C99的錯誤進行了修正,gcc支持的修正後的c99規範,但是到目前為止,gcc還沒有完成對c99規範的完全支援。
在默認設置下,gcc對c語言進行了一些自己的擴展。在不加語言設置參數的情況下,gcc使用c89規範和自己的一些擴展。在將來如果gcc完成了對c99的全面支持,可能默認會使用c99規範加gcc自己的擴展。
gcc下的語言規範設置:
-std=iso9899:1990,-ansi或-std=c89 (三者完全等同)來指定完全按照c89規範,而禁止gcc對c語言的擴展。
-std=iso9899:199409 使用C95規範
-std=c99 或者 -std=iso9899:1999 使用C99規範。
-std=gnu89 使用c89規範加上gcc自己的擴展(目前默認)
-std=gnu99 使用c99規範加上gcc自己的擴展