這裏選擇了github上的一個開源項目:360Controller作介紹,分析這套源代碼的代碼規範和風格並討論如何改進優化代碼。git
1、源代碼目錄結構、文件名/類名/函數名/變量名等命名、接口定義規範和單元測試組織形式等方面的作法和特色github
·源代碼目錄結構示例以下:編程
能夠看到這裏的目錄結構十分的清晰,可讓人明白的看出整個項目的組織結構和文件架構,特別的方便開發人員或者學習者的使用閱讀。數組
·文件名示例以下:架構
大多數的文件的做用均可以從文件名中直觀的看出來,方便開發人員的使用。編程語言
·類名命名和類結構示例以下:函數
採用駝峯命名法,徹底按照軟件編寫規範來要求。佈局
·函數名命名示例以下:單元測試
·變量名命名示例以下:學習
2、列舉哪些作法符合代碼規範和風格通常要求
·在文件名、類名、函數名、變量名命名方面都使用駝峯命名法,這一點很是符合程序設計規範,使讀者很是方便的知曉表達的意思。下圖看的十分明顯:
3、列舉哪些作法有悖於「代碼的簡潔、清晰、無歧義」的基本原則,及如何進一步優化改進
·在某些大段代碼中缺少註釋,使閱讀十分麻煩,以下:
4、總結同類編程語言或項目在代碼規範和風格的通常要求
代碼規範化基本上有七大原則,體如今空行、空格、成對書寫、縮進、對齊、代碼行、註釋七方面的書寫規範上。
一、空行
空行起着分隔程序段落的做用。空行得體將使程序的佈局更加清晰。空行不會浪費內存,雖然打印含有空行的程序會多消耗一些紙張,可是值得。
規則一:定義變量後要空行。儘量在定義變量的同時初始化該變量,即遵循就近原則。若是變量的引用和定義相隔比較遠,那麼變量的初始化就很容易被忘記。若引用了未被初始化的變量,就會致使程序出錯。
規則二:每一個函數定義結束以後都要加空行。
總規則:兩個相對獨立的程序塊、變量說明以後必需要加空行。好比上面幾行代碼完成的是一個功能,下面幾行代碼完成的是另外一個功能,那麼它們中間就要加空行。這樣看起來更清晰。
二、空格
規則一:關鍵字以後要留空格。像 const、case 等關鍵字以後至少要留一個空格,不然沒法辨析關鍵字。像 if、for、while 等關鍵字以後應留一個空格再跟左括號(,以突出關鍵字。
規則二:函數名以後不要留空格,應緊跟左括號(,以與關鍵字區別。
規則三:(向後緊跟;)、,、;這三個向前緊跟;緊跟處不留空格。
規則四:,以後要留空格。若是;不是一行的結束符號,其後要留空格。
規則五:賦值運算符、關係運算符、算術運算符、邏輯運算符、位運算符,如 =、==、!=、+=、-=、*=、/=、%=、>>=、<<=、&=、^=、|=、>、<=、>、>=、+、-、*、/、%、&、|、&&、||、<<、>>、^ 等雙目運算符的先後應當加空格。
注意,運算符「%」是求餘運算符,與 printf 中 %d 的「%」不一樣,因此 %d 中的「%」先後不用加空格。
規則六:單目運算符 !、~、++、--、-、*、& 等先後不加空格。
注意:
這裏的「-」和規則五里面的「-」不一樣。這裏的「-」是負號運算符,規則五里面的「-」是減法運算符。
這裏的「*」和規則五里面的「*」也不一樣。這裏的「*」是指針運算符,規則五里面的「*」是乘法運算符。
這裏的「&」和規則五里面的「&」也不一樣。這裏的「&」是取地址運算符,規則五里面的「&」是按位與運算符。
總之,規則六中的是單目運算符,而規則五中的是雙目運算符,它們是不同的。
規則七:像數組符號[]、結構體成員運算符.、指向結構體成員運算符->,這類操做符先後不加空格。
規則八:對於表達式比較長的 for 語句和 if 語句,爲了緊湊起見,能夠適當地去掉一些空格。但 for 和 if 後面緊跟的空格不能夠刪,其後面的語句能夠根據語句的長度適當地去掉一些空格。例如:
for (i=0; i<10; i++)
for 和分號後面保留空格就能夠了,=和<先後的空格可去掉。
三、成對書寫
成對的符號必定要成對書寫,如 ()、{}。不要寫完左括號而後寫內容最後再補右括號,這樣很容易漏掉右括號,尤爲是寫嵌套程序的時候。
四、縮進
縮進是經過鍵盤上的 Tab 鍵實現的,縮進可使程序更有層次感。原則是:若是地位相等,則不須要縮進;若是屬於某一個代碼的內部代碼就須要縮進。
五、對齊
對齊主要是針對大括號{}說的:
規則一:{和}分別都要獨佔一行。互爲一對的{和}要位於同一列,而且與引用它們的語句左對齊。
規則二:{}以內的代碼要向內縮進一個 Tab,且同一地位的要左對齊,地位不一樣的繼續縮進。
還有須要注意的是,不少編程軟件是會「自動對齊」的。
此外編程軟件還有「對齊、縮進修正」功能。就是按 Ctrl+A 全選,而後按 Alt+F8,這時程序中全部成對的大括號都會自動對齊,未縮進的也會自動縮進。不論是在編程過程當中,仍是在編寫結束完以後,均可以使用這個技巧。但若是徹底按照規範寫,那根本就不須要這個技巧,因此,這只是一個輔助功能。
六、代碼行
規則一:一行代碼只作一件事情,如只定義一個變量,或只寫一條語句。這樣的代碼容易閱讀,而且便於寫註釋。
規則二:if、else、for、while、do 等語句自佔一行,執行語句不得緊跟其後。此外,很是重要的一點是,不論執行語句有多少行,就算只有一行也要加{},而且遵循對齊的原則,這樣能夠防止書寫失誤。
七、註釋
C語言中一行註釋通常採用//…,多行註釋必須採用/*…*/。註釋一般用於重要的代碼行或段落提示。在通常狀況下,源程序有效註釋量必須在 20% 以上。雖然註釋有助於理解代碼,但注意不可過多地使用註釋。
規則一:註釋是對代碼的「提示」,而不是文檔。程序中的註釋不可喧賓奪主,註釋太多會讓人眼花繚亂。
規則二:若是代碼原本就是清楚的,則沒必要加註釋。
規則三:邊寫代碼邊註釋,修改代碼的同時要修改相應的註釋,以保證註釋與代碼的一致性,再也不有用的註釋要刪除。
規則四:當代碼比較長,特別是有多重嵌套的時候,應當在段落的結束處加註釋,這樣便於閱讀。
規則五:每一條宏定義的右邊必需要有註釋,說明其做用。