C語言參考手冊

有人都說C比較難,我看不怎麼難;可能就是C語言接觸到的底層太多了,所以感到有點難了,但這也不是什麼壞處,正是體現了C語言的優越之處:我們的權限更大,寫出的程序在性能上更好!


由於這個原因,再加上自己也想有個總結性的C參考手冊,原本打算自己根據C標準(C89、C99)整理一下C語言的,可誰知竟然發現這個工作早在27年前就有人已經做過了,而且做的特別好!這個人就是Samuel P. Harbison III!真讓人汗顏!


《C語言參考手冊(第五版)》(作者:Samuel P. Harbison III和Guy L. Steele Jr),有兩個譯本:一個是邱仲潘譯的(2003年),一個是徐波譯的(2008年)。這本書基本上可以取代現在任何一本C語言書(對於入門的人除外),甚至是可以取代C標準(C89、C95、C99)(這不是不需要C標準,而是你可以不用再看、查C標準)。該書中包括了傳統C(C89以前的C)、C89、C95、C99,並介紹了C與C++的對接。


C語言的演變


傳統C語言


最初的C語言描述出現在Brian Kernighan與Dennis Ritchie(通常合稱爲“K&R”,他們也是UNIX系統的創造者)的著作《The C Programming Language》第1版(Prentice-Hall, 1978)。此書出版後,這個語言不斷有比細小的演變,增加或刪除了一些我。我們把20世紀80年代初公認的C語言定義稱爲傳統C語言,是標準化之前的方言。當然,各個C語言提供商也對傳統C語言進行了各種擴展。


標準C語言(1989)


1982年,美國國家標準協會(ANSI)認識到標準化將有助於C語言在商業化編程中的普及,因此成立了一個委員會來爲C語言及其運行庫制定標準。這個委員會,即X3J11(現在爲NCTTS  J11)的主席是Jim Brodie,它制定了一個標準並在1989年被正式採用,即美國國家標準X3.159-1989或稱作“ANSI C”。


考慮到編程活動是國際化的,因此完成ANSI C語言之後,成立了一個國際標準化組織ISO/IEC  JTC1/SC22/WG14,在P.J Plauger(曾出版《C標準庫》——是基於C89的,現爲ISO C++標準委員會主席)的領導下,只作了少量編輯性修改,即把ANSI標準變成了國際標準ISO/IEC 9899:1990.此後,ISO/IEC標準被ANSI採用,人們把這個公共標準稱爲“標準C語言”。由於這個標準後來又有了變化,因此我們稱爲其爲“標準C語言(1989)或簡稱”C89“。


傳統C語言到C89的改變包括:


增加了真正的標準庫

新的預處理器命令與特性

函數原型允許在函數聲明中指定參數類型

一些新關鍵字,包括const、volatile與signed(注:一些國內教材(如譚浩強的《C程序設計》)講解的語法大部分都是沿用傳統C,對C標準的新特性提都沒提)

寬字符、寬字符串和多字節字符

對約定規則、聲明和類型檢查的許多小改動與澄清


標準C語言(1995)


作爲對C語言標準的正常維護工作,WG14對C89作了兩處技術修訂(缺陷修復)和一個補充(擴展)。總的來看,尤其是通過增加新的庫函數,以上這些工作對C語言標準進行了相對合適的修改,得到的結果我們稱之爲“C89增補1”或“C95”。C95對C89所作的改變包括:


3個新的標準庫頭文件iso646.h、wctype.h與wchar.h

幾個新的記號和宏,用於替換一些國家的字符集中沒有的運算符和標點符號(這些在頭文件iso646.h中定義)

printf/scanf系列函數的一些新格式代碼

大量新函數和一些類型與常量,用於多字節字符和寬字符


標準C語言(1999)


ISO/IEC標準都需要經常進行審查和更新。1995年,WG14開始對C語言標準作更大的修訂,最終於1999年完成並獲批准。新標準ISO/IEC 9899:1990或“C99”取代原有的標準(及所有修訂與補充),成爲正式標準C語言。提供商根據新標準更新各自的C語言函數庫和編譯器。


C99在C89/C95語言和庫函數中增加了許多新特性,包括:


複數運算

擴展整數類型,包括長標準類型(如long long int,  unsinged long long int,  long long double等等)

變長數組(在C89中,變長長度不支持變量;在C99獲得允許)

布爾數組

布爾類型

對非英語字符集更好的支持

對浮點數類型更好的支持,包括所有類型的數學函數

C++風格的註釋(//)


C99的改動比C95更大,包括語言的改變和函數庫的擴展。C99標準文檔比C89文檔大得多(C89的中文版(GB/T 15272-94)有195頁,C99英文版有540左右)。但是,改變還是“本着C語言精神”進行的,語言的基本性質沒有改變。


C編譯器的選擇


有很多人推薦選擇VC6.0,實在不明白他們推薦這款編譯器有什麼目的。本人不建議初學者用這款編譯器,一個顯著的理由是VC6.0已經開發10多年了,關鍵的是從那時到現在,微軟一直沒有更新這款編譯器(好像已經放棄了它的開發),而是維護着VC2008。由於以上原因,VC6.0遠遠不支持C標準了,據有人測試,VC6.0對C++標準的支持最高才是70%,想想C++標準第一次發佈是在1998年,而現在已經10多年過去了,VC6.0還能符合標準嗎?一個重要的例子,就是for循環的作用域問題,VC6.0在設計時就是個缺陷。


如果還想用微軟的產品,你可以使用VC2005或VC2008,據微軟公佈VC2008支持C++標準達到98%(不知是真是假)。


在這裏筆者推薦你用GCC編譯器,GCC是開源的、跨平臺的,基本上在目前主流的平臺上都能使用GCC;而且你也可以拿到GCC編譯器的源代碼。至於其他的理由,你可以上百度、谷歌上搜搜。


GCC編譯器原本上是命令行界面的,如果在Windows下,可以使用DEV-C++,GCC編譯在Windows下的圖形化界面,而且小巧靈瓏(只有9M左右),相比旁大的VC(VC2008有幾個G),DEV-C++是你很好的選擇。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章