官术网_书友最值得收藏!

1.3.1 Linux內核編碼風格的一些規定

眾所周知,Linux內核的發展已逾30年。作為目前全球使用最為廣泛的開源操作系統,一方面,Linux已經成為使用C語言編寫大型基礎軟件工程項目的全球典范;另一方面,Linux也是目前最為成功的全球性開源協作項目。可以說,Linux內核是每一位C程序員取之不盡、用之不竭的寶庫。作為一名C程序員,學習Linux內核的編碼風格,并有意向其靠近,是絕對正確的選擇。

這里以縮進和注釋為例介紹Linux內核的編碼風格。完整的Linux內核編碼風格文檔,可通過在任意搜索引擎中搜索Linux kernel coding style閱讀。

Linux內核的編碼風格規定,代碼的縮進應該采用制表符(Tab),寬度為8個空格(和Windows操作系統中大多數編輯器或字處理軟件常使用4個空格不同)。例如:

int system_is_up(void)
{
        return system_state == SYSTEM_RUNNING;
}

這個規定有什么好處呢?Linux內核的編碼風格還規定每一行代碼的長度不得超過80個字符。按照“Linux之父”Linus的說法,如果代碼的縮進或嵌套超過3個層次,就要考慮對代碼進行重構。因此 8 個空格的縮進可以有效地限制縮進或嵌套的層次,迫使程序員在編寫代碼時不要采用過多的嵌套或縮進。

當然,8個空格的縮進要求確實有些嚴苛,讀者也可以酌情在自己的代碼中采用4個空格的縮進,但4個空格應該是底線,再少就不合適了。

Linux內核的編碼風格還禁止采用C編程語言的“//”注釋方式(這和Linus不喜歡C++編程語言有一些關系)。Linux內核采用的單行注釋形式如下:

/* This is a single-line comment. */

Linux內核采用多行注釋形式如下:

/*
 * This is the preferred style for multi-line
 * comments in the Linux kernel source code.
 * Please use it consistently.
 *
 * Description: A column of asterisks on the left side,
 * with beginning and ending almost-blank lines.
 */

除此之外,在Linux內核的編碼風格中,還特別說明不要針對結構體使用typedef定義新的數據類型,而應該始終使用struct foo這樣的形式。

作為一個重要的經驗性約定,Linux內核的編碼風格要求所有的函數在末尾集中返回。也就是說,應避免在一個函數的頭部或中部使用return語句。因此,我們可以在Linux內核的源代碼中看到被傳統編程教材強烈否定的goto語句的頻繁使用。本章后面將解釋這一做法的好處。這類規定屬于經驗性約定,在某種程度上可以規范某些編碼行為,從而提高代碼的一致性和質量,屬于可維護性的范疇。

主站蜘蛛池模板: 桐柏县| 郓城县| 比如县| 长丰县| 手游| 汕尾市| 南投市| 泌阳县| 天柱县| 河间市| 临汾市| 湖北省| 日喀则市| 临猗县| 弋阳县| 滕州市| 潮安县| 廊坊市| 宣汉县| 赤壁市| 城口县| 得荣县| 天津市| 许昌县| 九龙县| 唐河县| 昆山市| 霍林郭勒市| 资中县| 锡林浩特市| 屏南县| 东光县| 海阳市| 荔波县| 陈巴尔虎旗| 万宁市| 阜阳市| 泽州县| 新沂市| 洛川县| 闻喜县|