2013年11月9日 星期六

[Linux C]-GCC編譯 C與C++ C89與C99

[Linux C]-GCC編譯 CC++ C89C99



拷貝來源:http://hi.baidu.com/zzcqh/item/c76fc92e99fac20842634a1e


 


Q:gcc的全稱是什麼:
A: gcc
gnu compiler collectiongnu 編譯器套裝),它不僅僅只是編譯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)c99C89是最早的C語言規範,於89年提出,90年先由美國國家標準局推出ANSI版本,後來被接納為ISO國際標準 (ISO/IEC 9899:1990),因而有時也稱為c90但在9496年分別對c90進行了兩次錯誤修正,gcc支援的是修正後的c89(90)版本的C語言規範。在95年提出過對90版規範的修訂案,稱為 C95或者AMD1gcc也支援c95規範。最新的一次C規範修訂在99年制定(ISO/IEC 9899:1999),即常稱的C99規範。在2001年對C99的錯誤進行了修正,gcc支持的修正後的c99規範,但是到目前為止,gcc還沒有完成c99規範的完全支援。 

在默認設置下,gccc語言進行了一些自己的擴展。在不加語言設置參數的情況下,gcc使用c89規範和自己的一些擴展。在將來如果gcc完成了對c99的全面支持,可能默認會使用c99規範加gcc自己的擴展。

gcc下的語言規範設置:



-std=iso9899:1990
-ansi-std=c89 (三者完全等同)來指定完全按照c89規範,而禁止gccc語言的擴展。



-std=iso9899:199409
使用C95規範



-std=c99
或者 -std=iso9899:1999 使用C99規範。



-std=gnu89
使用c89規範加上gcc自己的擴展(目前默認)



-std=gnu99
使用c99規範加上gcc自己的擴展


 


沒有留言:

張貼留言