gcc編譯器小知識

q:gcc的全稱是什麼: a: gcc 是 gnu compiler collecti 編譯器套裝),它不單單只是編譯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本身的擴展 gcc支持傳統C語言(也就是K&R C),包括一些處於規範以外但常見且使用的C語法。在編譯時,指定'-traditional'選項便可。另外該選項還支持GNU對C語言的擴展 gcc 的'-ansi'選項'-ansi'支持符合ANSI標準的C程序,這樣就會關閉GNU C中某些不兼容ANSI C的特性,例如asm, inline和 typeof關鍵字,以及諸如unix和vax這些代表當前系統類型的預約義宏,同時開啓 不受歡迎和極少使用的ANSI trigraph特性,以及禁止`$'成爲標識符的一部分。 儘管使用了'-ansi'選項,下面這些可選的關鍵字, __asm__, __extension__, __inline__和__typeof__仍然有效.你固然不會把 他們用在ANSI C程序中,但能夠把他們放在頭文件裏,由於編譯包含這些頭文件的程序時,可能會指定 `-ansi'選項。另一些預約義宏,如__unix__和__vax__,不管有沒有使用 ‘-ansi’選項,,始終有效。 使用‘-ansi'選項不會自動拒絕編譯非ANSI程序,除非增長`-pedantic'選項做爲 `-ansi'選項的補充。 gcc 的‘-pedantic‘選項可打開徹底服從ANSI C標準所需的所有警告診斷;拒絕接受採用了被禁止的語法擴展的程序。不管有沒有這個選項,符合ANSI C標準的程序應該可以被正確編譯(雖然極少數程序須要‘-ansi' 選項)。然而,若是沒有這個選項,某些GNU擴展和傳統C特性也獲得支持。使用這個選項能夠拒絕這些程序。沒有理由使用這個選項,他存在只是爲了知足一些書呆子(pedant)。對於替選關鍵字(他們以’__'開始和結束) ,‘-pedantic'不會產生警告信息。Pedantic 也不警告跟在__extension__後面的表達式,不過只應該在系統頭文件中使用這種轉義措施,應用程序最好 避免。
相關文章
相關標籤/搜索