幾句話瞭解C標準之間的關係
C語言標準
- 早期的計算機彙編語言是與機器平臺緊密耦合的,爲了屏蔽這種耦合,增長代碼的可移植性,C語言隨機出現。
- 二十世紀八十年代,爲了不各開發廠商用的C語言語法產生差別,由美國國家標準局爲C語言制定了一套完整的國際標準語法,稱爲ANSI C,做爲C語言最初的標準。
- 與ANSI C標準同時出現的就是ISO組織,將ANSI C加入了ISO的你們庭,定義了ISO C。除了在格式和排版等方面存在一些差異外,其餘都與ANSI C相同。
- 因此一句話ANSI C與ISO C 對於咱們開發者來講徹底相同。
-
目前出現的C標準以下:html
- 對於編程來講,不一樣的機器平臺的編譯器可能不一樣,可是他必須按照ISO C的標準來實現,即他必須支持對於C標準的語法規則的編譯。固然隨着C標準的演進,編譯器也是須要隨之演進的,好比當前的C11標準,不是全部的編譯器均支持。
- 交叉編譯,就是在一個平臺上經過交叉編譯器,編譯另個平臺上運行的程序。編譯器起到重要做用哦~
C標準庫
- C標準庫是嚴格按照C標準規範實現的一個C庫,在Linux下有個叫libc的庫就是標準庫了。有些Linux下可能已經和glibc打包到一塊兒了。
- 起初的C標準庫存在15個頭文件(後續介紹),我認爲這15個頭文件是咱們做爲C開發者必須知道的。每一個語言的誕生都會有一些語言對應的庫提供給開發者,這是一個語言可以發展起來的基礎。(我的理解哈~)
POSIX C
- 提及POSIX C有人會鄙視我,說根本就沒有POSIX C,對是沒有POSIX C標準,可是有POSIX C庫。
- 首先要理解什麼事POSIX,全稱:可移植操做系統接口。故名思議,因爲當時Unix誕生以後,因爲各個廠商都實現本身的Unix(都敢使用Unix,因爲版權的問題),接口的不統一,致使在各個廠商下基於不一樣的操做系統開發變得很亂,爲了解決這一問題,便有了POSIX標準。
- 一句話:POSIX標準的誕生是爲了統一個操做系統的接口,方便開發者開發程序,寫出可移植的代碼程序。基於POSIX標準的庫函數都是能夠在持之此標準的操做系統平臺上移植的。
- 咱們說的posix c庫就是基於POSIX標準定義的一套頭文件實現的lib庫。
- 因此說咱們man手冊中常常會看到POSIX Program信息,表示是遵循POSIX標準而實現的。
展現一下ANSI C和POSIX C庫的頭文件哪些。以下展現的C標準庫頭文件是被擴展以後的標準,而不是起初的標準庫了。增長了一些功能。
http://www.cnitblog.com/guopi...編程
GNU C
- GNU 是一個自由軟件基金會,GNU's Not Unix.
- GNU 是爲了實現自由開源目的一個基金會,它提供了不少基於POSIX標準的軟件和庫,好比glibc、gcc、emacs等等。
- 聊到這裏就要聊聊Linux了,Linux誕生相信你們都據說過了,此處再也不提。因爲Linux開發者擁護GNU理念,將Linux也就遵循了GNU標準,而且Linux的開發也使用了GNU提供的大量的庫函數。
- 因此每一個Linux版本都存在glibc的庫。
- Linux爲了兼容性考慮在設計之初就按照POSIX標準,支持了POSIX標準。
- GNU C叫作glibc是Linux上的一個基礎庫,glibc C實現了POSIX C標準的庫函數功能,有些POSIX標準是單獨的庫函數存在的
- 小插曲:因爲GNU組織沒有開發出很完善的操做系統內核,使用了Linux內核,因此將Linux歸入進來,又因爲GNU組織存在不少開源的很好的工具組件促使Linux快速成長,因此說GNU和Linux是相互成全。(我的感受僅供參考~)
C語言學習我的總結
- 想要使用C語言開發軟件系統,必須瞭解C標準包括語法規則,其次瞭解C標準庫清楚哪些基礎庫可使用,使用時再查也是能夠的。
- 對於C標準庫應該各個操做系統平臺都支持,放心使用便可。
- 在類Unix、Linux操做系統上編程,固然要學習POSIX標準,瞭解POSIX提供了哪些編程接口,方便快速開發。
- 在Windows上固然也有一套編程接口,不瞭解不瞎嗶嗶了。可是:不是說windows徹底不支持POSIX標準。Windows NT-based 系統不能直接支持新版POSIX接口,僅支持初版POSIX v1:ISO/IEC9945-1:1990[1]版標準。因爲僅支持初版POSIX的Windows NT-based系統不能建立符合POSIX接口標準的線程和窗體、套接字,因此微軟公司提供POSIX兼容層Microsoft POSIX subsystem軟件包(Windows Services for UNIX)以支持新版POSIX接口,Windows 系統還能夠運行其餘POSIX兼容層例如Cygwin.
- C標準不斷的演進有些新增語法也是值得學習的,畢竟新增的語法和頭文件更加方便咱們開發程序。
- GNU C中存在一些對於C標準的優化,若是是在Linux上開發程序,那咱們應該大膽的使用它,方便咱們程序的開發。例如關於__attribute__的機制就是GNU C的一大特點。因此關於GNU C咱們也是要好好的學習一下的。