|
C語言是一種標準,這個標準定義了很多保留字,給這些保留字賦予了標準含義,也包含了很多預定義的h頭文件(C標準只是定義了這些文件而沒有實現)。而且C語言并未和某個底層硬件綁定,所以C語言是跨平臺的,類似Java,不過C的跨平臺只是源代碼級的,對不同平臺要編譯成不同的代碼,而Java本身就于平臺無關,它是基于虛擬機的,也就是憑空設想的一個平臺,這個平臺對Java而言是一致的,但Java最終是要運行在某個實際平臺上的,所以Java對上層的應用程序提供一致平臺,對下層卻是靠不同的Java解釋器來實現的,也就是X86系列下有Windows版的解釋器,也有Linux的解釋器,甚至與手機上也有Java,這一切所改變的只是依賴于平臺的解釋器而已,而你的編譯后的Java二進制代碼而沒有改變,神奇吧!
平時我們用的各種C語言的編譯器,例如Borland 的TurboC的編譯器,Watcom的C編譯器其實都是對C語言標準的一種實現,也就是給予C標準的解釋。在C語言預定義的h頭文件C語言本身并沒有實現,而且里面的很多概念也是于平臺無關的,比如file文件的概念,等等,這都需要各個平臺自己根據自己平臺提供的信息去實現這些功能,比如把file文件的概念和自己平臺中相應的文件聯系起來,然后包裝后共C語言標準使用。更明顯的是內存管理函數(例如malloc、realloc等函數)的實現,各個平臺(同一個硬件平臺下操作系統也可能不同)顯然是差別很大的,各個平臺根據自己內存的管理方式包裝后實現C語言提供的內存管理函數,供C語言使用。
同樣C++也是一個標準,各個平臺對其解釋不同而已。
由于C語言標準初制定時對某些標準作出的解釋引起異議,所以有時候C程序也并非完全都是可移植,而且各個公司對C標準的實現有時候也不是完全實現了C標準或者加入一些非標的東東進去,這樣更加導致C程序的可移植性,就好像微軟的IE并未完全符合Html標準一樣,所以就導致網頁制作者要針對不同的瀏覽器設計不同的代碼。
為了提高C語言的開發效率,C標準定義了一系列常用的函數,稱為C庫函數。C標準僅僅定義了函數原型,并沒有提供實現。因此這個任務留給了各個支持C語言標準的編譯器。每個編譯器通常實現了標準C的超集,稱為C運行時庫(C Run Time Libray) ,簡稱CRT。對于VC++編譯器來說,它提供的CRT庫支持C標準定義的標準C函數,同時也有一些專門針對windows系統特別設計的函數。
與C語言類似,C++也定義了自己的標準,同時提供相關支持庫,我們把它稱為C++運行時庫或C++標準庫。
由于C++對C的兼容性,C++標準庫包括了C標準庫,除此之外還包括IO流和標準模板庫STL。
|
|
|
|
|
|
|