豐富多彩的C/C++程序設計
在研究項目團隊協(xié)作開發(fā)的情況下(這里的團隊協(xié)作也適合于應用項目的開發(fā)),編程時應該強調(diào)的一個重要方面是程序的易讀性,在保證軟件速度等性能指標能滿足用戶需求的情況下,能讓其他程序員容易讀懂你所編寫的程序。
若研究項目小組的所有開發(fā)人員都遵循統(tǒng)一的、鮮明的一套編程風格,可以讓協(xié)作者、后繼者和自己一目了然,在很短的時間內(nèi)看清楚程序結構,理解設計的思路,大大提高代碼的可讀性、可重用性、程序健壯性、可移植性、可維護性。
制定本編程規(guī)范的目的是為了提高軟件開發(fā)效率及所開發(fā)軟件的可維護性,提高軟件的質(zhì)量。本規(guī)范由程序風格、命名規(guī)范、注釋規(guī)范、程序健壯性、可移植性、錯誤處理以及軟件的模塊化規(guī)范等部分組成。
本軟件開發(fā)規(guī)范適合討論C/C++程序設計。
1 文件結構
每個C++/C程序通常分為兩個文件。一個文件用于保存程序的聲明(declaration),稱為頭文件。另一個文件用于保存程序的實現(xiàn)(implementation),稱為定義(definition)文件。
C++/C程序的頭文件以“.h”為后綴,C程序的定義文件以“.c”為后綴,C++程序的定義文件通常以“.cpp”為后綴(也有一些系統(tǒng)以“.cc”或“.cxx”為后綴)。
1.1 文件信息聲明
文件信息聲明位于頭文件和定義文件的開頭(參見示例1-1),主要內(nèi)容有:
(1) 版權信息;
(2) 文件名稱,項目代碼,摘要,參考文獻;
(3) 當前版本號,作者/修改者,完成日期;
(4) 版本歷史信息;
(5) 主要函數(shù)描述。
顯然,如果找不出要學習C++的理由,那么談什么“正確的學習方法”等于是廢話。 首先重復一句Bjarne的話:“我們的系統(tǒng)已經(jīng)是極度復雜的了,為了避開C++的復雜性而干脆不用C++(Linus的做法),無異于因噎廢食?!痹谒锌捎肅和C++的領域,C++都是比C更好的語言。
當我說“更好的”時候,我說的是C++擁有比C更安全的類型檢查、更好的抽象機制、更優(yōu)秀的庫。當然,凡事都有例外,如果你做的項目1)不大。2)編碼中用不到什么抽象機制,甚至ADT(抽象數(shù)據(jù)類型,例如std::complex這種不含多態(tài)和繼承的)也用不到,RAII也用不到,異常也用不到。
3)你連基礎庫(如,簡化資源管理的智能指針、智能容器)都用不著。那么也許你用C的確沒問題;所以如果你的情況如此,不用和我爭論,因為我無法反駁你。我們這里說的領域大致是Bjarne在“C++應用列表”里面列出來的那些地方。 #t#
底線是:如果把C++中的諸多不必要的復雜性去掉,留下那些本質(zhì)的,重要的語言特性,簡化語言模型,消除歷史包袱。即便是C++的反對者也許也很難找到理由說“我還是不用C++”。在我看來,一個真正從實踐意義上理性反對使用C++的人只有一個理由:C++的復雜性帶來的混亂抵消乃至超過了C++的抽象機制和庫(在他的特定項目中)帶來的好處。
值得注意的是,這里需要避免一個陷阱,就是一旦人們認定了“C++不好”,那么這個理由就會“長出自己的腳來”,即,就算我們拿掉C++的復雜性,他們可能也會堅持還是不用C++,并為之找一堆理由。
我假定你不是這樣的人。不過,也許最可能的是他會說:“問題是我們今天用的C++并非如此(簡潔),你的假設不成立?!笔堑模业募僭O不成立。但雖然我們無法消除復雜性,我們實際上是可以容易地避開復雜性,避短揚長的。這也是本文的要點,容我后面再詳述。