gcc編譯器小知識FAQ(轉)

ba發表於2007-08-12
gcc編譯器小知識FAQ(轉)[@more@]我收集了一些gcc相關的知識,提供給沒時間或者沒興趣瞭解gcc太多細節知識的朋友。但是這些知識確實又是作為一個gcc使用者應該知道的。

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自己的擴充套件

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617731/viewspace-950191/,如需轉載,請註明出處,否則將追究法律責任。

相關文章