C語言中文網 目錄
首頁 > 編程筆記 > C語言筆記 閱讀:3,197

關于GNU規范的語法擴展

GNU 是一款能用于構建類 Unix 操作系統的計算機軟件合集,由自由軟件之父 Richard Stallman 開創,于 1983 年 9 月 27 日對外發布。GNU 完全由自由軟件(free software)構成。

GNU 語法擴展源自于 GCC 編譯器,在 1987 年發布 1.0 版本,稱為 GNU C Compiler。隨后,GCC 編譯器前端支持了 C++、Objective-C/C++、Fortran、Ada、Java 以及最近躍升的 Go 等編程語言,因此現在 GCC 被稱為 GNU Compiler Collection。

由于在 20 世紀 90 年代,GNU C 編譯器就對 C90 標準做了相當多的語法擴展,包括復合字面量、匿名結構體和數組、可指定的初始化器等,這些語法擴展被廣泛使用,尤其是大量用于 Linux 內核代碼中,因此 C99 標準將這些語法特性全都列入標準之中。

正因為 GCC 本身是開源自由軟件,因此很多商用編譯器也基于 GCC 進行擴展,例如:
  • 像 ARM 的 RVCT(RealView Compiler Toolkit)本身就支持 GNU 擴展;
  • 還有不少開發平臺本身就直接使用 GCC 編譯工具。

由于有不少大公司頂級開發人員的參與,因此 GCC 編譯器的目標代碼優化能力相當高,而且還支持許多不同的處理器。所以,GCC 當前被廣泛使用并博得開發者的好評。像 Linux 操作系統基本默認使用 GCC 作為默認編譯器,包括 Android 的 NDK 開發工具一開始也是如此。

然而,由于 GCC 基于比較嚴格的 GPL 許可證,許多大型商業開發商對它望而卻步。該許可證允許使用者免費使用軟件,但是要求不能隨意對它進行篡改并重新發布。如果開發者對它進行篡改,然后發布自己修改之后的軟件,那么必須要把自己修改的那部分也開源出來。

因此,在 2003 年誕生了一個 LLVM 開源項目,基于更為寬松的 BSD 許可證,其編譯器稱為 Clang。BSD 許可證允許開發者隨意對軟件進行修改并重新發布,甚至可以將修改過的版本作為自主版權,因而這個許可證深受大公司的歡迎。

現在 Apple 對 LLVM 項目的投入非常大。macOS 上的開發工具 Xocde 從 4.0 版本起就開始使用 Clang 編譯工具鏈,隨后 Apple 將自己改寫的 Clang 編譯器稱為 Apple LLVM。當前最新的 Xcode 8 所使用的 Apple LLVM 版本為 8.x。

而當前 Android NDK 也支持了 Clang 編譯器工具鏈。

Clang 編譯器并非基于 GCC,它是從頭開始寫的。但是它的目標是盡量與 GCC 編譯器兼容,所以Clang 編譯器包含大部分 GNU 語法擴展,除此之外還含有它自己特有的C語言擴展。當然也有一些特性是 GCC 含有而 Clang 不具備的,不過這些特性一般很少使用。

我們現在可以看到 GNU 語法擴展適用性十分廣泛。如果讀者當前在做 Linux/Unix 或 Windows 上的C語言編程開發,或者是在開發 macOS/iOS 應用,又或者是在開發 Android 應用,那么完全可以毫無顧忌地使用 GNU 語法擴展。

本教程最后幾個章節會分別介紹 GCC 編譯器特定的語法擴展以及 Clang 編譯器特定的語法擴展。由于 Clang 編譯器已經包含了大部分 GNU 語法擴展,因此在介紹 GCC 語法擴展的時候,如果當前特性 Clang 不支持,則會指明。

精美而實用的網站,提供C語言C++STLLinuxShellJavaGo語言等教程,以及socketGCCviSwing設計模式JSP等專題。

Copyright ?2011-2018 biancheng.net, 陜ICP備15000209號

底部Logo