寫C語言代碼時應該注意的一些事情

代碼風格 - 寫C語言代碼時應該注意的一些事情

縮進

C語言不是依靠縮進進行語法分析的語言, 所以你大可以把你的代碼壓縮至僅有一行的形式, 但是這種代碼的可閱讀性是非常之低的, 所以在網絡上看到的大部分示例代碼都是格式很好易於閱讀的, 其中比較重要的第一條就是縮進.

縮進就是指人爲的使用空格或者製表符使代碼顯得更加富有層次感, 一般的編輯器都會有自動縮進的功能, 根據每個人寫代碼的習慣的不同, 縮進方式也會略有不同, 但是有些問題是大同小異, 所有人都要注意到的:

空格和製表符的區別

大多數的編輯器在支持自動縮進功能以後, 會自動在代碼中插入空格或者製表符來符合一定的縮進標準: 比如說代碼塊之間使用一個製表符或者4個空格來進行縮進.

舉例, 我的電腦環境上的Sublime Text 3使用的自動縮進的方式是一個Tab, 但是我的Vscode使用的自動縮進是4個空格, 這樣的話如果我的一段代碼使用兩個編輯器編寫以後, 代碼中就同時使用了Tab和Space來進行縮進.

在某些情況下這看起來沒什麼問題, 這是因爲在不同的編輯器中有顯示的形式: 空格就是正常的顯示, 但是Tab會有很多中顯示的方式, 比如常見的2-space, 4-space和8-space, 正是因爲有很多不同的縮進方式, 所以會有很多不同的顯示方式. 如果在你的工作環境中使用的方式是4-space, 那麼你平時使用4個空格進行縮進就不會有什麼問題, 但是換到另外一種環境中, 比如github的代碼顯示的時候, 很多時候是8-space, 也就是一個製表符顯示爲8個空格的寬度, 這樣你的代碼就會變得奇奇妙妙.

奇奇妙妙, JOJO的奇妙代碼是不會有人想看的.

所以就是建議統一自己寫代碼的縮進風格, 不要在同一個項目中使用不同的縮進風格: 要使用製表符就都使用製表符, 要使用空格就都使用空格.

註釋

註釋的意義在於讓代碼具有更好的可閱讀性, 讓別人和自己都能夠看懂自己寫的代碼(如果有時讓我看一年前我寫的一段沒有註釋的代碼, 我鐵定也要看一陣子才能夠弄明白其中的意義), 所以好的習慣就是在代碼中加上註釋.

一般的註釋分爲以下幾種:

  • 代碼的開頭, 用於解釋代碼的路徑, 依賴, 作用等等, 是比較全局和大體的描述
  • 函數的開頭, 用於解釋函數的功能和作用, 使用的條件, 應該傳入的參數, 會返回的返回值, 參數和返回值的意義, (如果是弱類型語言還應該聲明參數和返回值的類型).
  • 每個具有獨立邏輯意義的代碼塊, 需要添加註釋來解釋作用
  • 較爲晦澀難懂的語句, 比如冗長的位運算語句, 需要特殊說明
  • 後期維護的更改, 需要添加註釋標註修改信息(其實看git commit history就還好)

代碼塊

代碼塊, 就是指一段代碼中關係緊密, 實現統一功能的代碼片段, 比如說循環結構中的循環體, 分支結構中的不同分支, 順序結構中不同的區段, 都可以看作是代碼塊, 而代碼塊中也會包含代碼塊, 因此爲了能夠更加清晰的閱讀代碼, 一般我們會將不同的代碼塊隔開.

空格

在不同的代碼風格中, 語言內置關鍵字和符號周圍會分佈有不同數量的空格, 這裏推薦大家使用相同的習慣:

非獨立的左大括號和關鍵字之間應該加上空格

if (...)  { // 之間有空格

} else {

}

for (...) { // 之間有空格

}

void print(int a) { // 之間有空格 

}

struct Info { // 之間有空格

}

非參數傳遞中的運算符兩邊應該附有空格

int a = 1, b = 2, c; // 賦值運算符兩邊應該有空格

c = a + b * (a * b); // 括號要貼近表達式

for (int i = 0; i < n; i ++) { // 句子之間要使用空格分開

}

while(! a == 0) {

}

參數傳遞中的運算符應該緊貼

print(a*b+c);

get_params(str[1]+str[2]);

有很多不同的代碼規範, 我說的只是其中的一種而已, 每個人在寫代碼的時候都會形成自己的代碼風格, 但是還是要有一個基本原則: 代碼可讀性高. 因此就是說, 不管遵循什麼樣子的代碼規範, 最終還是要讓代碼顯得整潔, 能讓除了自己以外的人很快能看懂.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章