影響C++/C程序的幾大要素
C++/C程序對函數(shù)的處理方式是不同的。extern "C"是使C++能夠調(diào)用C寫作的庫文件的一個手段,如果要對編譯器提示使用C的方式來處理函數(shù)的話,那么就要使用extern "C"來說明。
若研究項目小組的所有開發(fā)人員都遵循統(tǒng)一的、鮮明的一套編程風(fēng)格,可以讓協(xié)作者、后繼者和自己一目了然,在很短的時間內(nèi)看清楚程序結(jié)構(gòu),理解設(shè)計的思路,大大提高代碼的可讀性、可重用性、程序健壯性、可移植性、可維護(hù)性。
制定本編程規(guī)范的目的是為了提高軟件開發(fā)效率及所開發(fā)軟件的可維護(hù)性,提高軟件的質(zhì)量。本規(guī)范由程序風(fēng)格、命名規(guī)范、注釋規(guī)范、程序健壯性、可移植性、錯誤處理以及軟件的模塊化規(guī)范等部分組成。
每個C++/C程序通常分為兩個文件。一個文件用于保存程序的聲明(declaration),稱為頭文件。另一個文件用于保存程序的實現(xiàn)(implementation),稱為定義(definition)文件。
C++/C程序的頭文件以“.h”為后綴,C程序的定義文件以“.c”為后綴,C++程序的定義文件通常以“.cpp”為后綴(也有一些系統(tǒng)以“.cc”或“.cxx”為后綴)。早期的編程語言如Basic、Fortran沒有頭文件的概念,C++/C語言的初學(xué)者雖然會用使用頭文件,但常常不明其理。這里對頭文件的作用略作解釋:
(1) 通過頭文件來調(diào)用庫功能。在很多場合,源代碼不便(或不準(zhǔn))向用戶公布,只要向用戶提供頭文件和二進(jìn)制的庫即可。用戶只需要按照頭文件中的接口聲明來調(diào)用庫功能,而不必關(guān)心接口怎么實現(xiàn)的。編譯器會從庫中提取相應(yīng)的代碼;
(2) 頭文件能加強(qiáng)類型安全檢查。如果某個接口被實現(xiàn)或被使用時,其方式與頭文件中的聲明不一致,編譯器就會指出錯誤,這一簡單的規(guī)則能大大減輕程序員調(diào)試、改錯的負(fù)擔(dān)。assert不是一個倉促拼湊起來的宏。為了不在程序的Debug版本和Release版本引起差別,assert不應(yīng)該產(chǎn)生任何副作用。
所以assert不是函數(shù),而是宏。程序員可以把a(bǔ)ssert看成一個在任何系統(tǒng)狀態(tài)下都可以安全使用的無害測試手段。如果程序在assert處終止了,并不是說含有該assert的函數(shù)有錯誤,而是調(diào)用者出了差錯,assert可以幫助我們找到發(fā)生錯誤的原因。
絕大多數(shù)人都把細(xì)節(jié)太多(或者用貶義詞來說就是“陰暗角落太多”)歸結(jié)為C++的本質(zhì)問題,認(rèn)為一切邪惡由此而生。也正因此,大約9月份的時候,Linus在郵件列表上說“C++/C程序是一門有思想包袱的語言;僅僅是為了讓程序員遠(yuǎn)離C++,我也要用C”。這句短短的話在國內(nèi)引起了很大的反應(yīng),最初是劉江轉(zhuǎn)了Linus的話,然后云風(fēng)和孟巖都發(fā)表了自己的看法;我也寫了一篇“Why C++”(后來發(fā)給Bjarne,Bjarne對這篇文章做了一個友情評注)。
然而,這一通渾水?dāng)囘^之后,我相信引起的變化未必很大。大多數(shù)原先的反對者能從中找出反對的理由,于是更加反對;大多數(shù)原先的贊同者也能從中找到贊同的理由,于是更加贊同;而剩下來的原先沒有明確意見的,看雙方各有各的道理,可能還是沒有頭緒。
【編輯推薦】