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
語句的頻繁使用。本章后面將解釋這一做法的好處。這類規定屬于經驗性約定,在某種程度上可以規范某些編碼行為,從而提高代碼的一致性和質量,屬于可維護性的范疇。
- 深入實踐Spring Boot
- PostgreSQL技術內幕:事務處理深度探索
- Mastering Julia
- 秒懂設計模式
- Oracle BAM 11gR1 Handbook
- C++程序設計基礎教程
- 大模型RAG實戰:RAG原理、應用與系統構建
- Learning SciPy for Numerical and Scientific Computing(Second Edition)
- OpenStack Orchestration
- App Inventor少兒趣味編程動手做
- .NET 4.0面向對象編程漫談:應用篇
- Modernizing Legacy Applications in PHP
- 安卓工程師教你玩轉Android
- Learning TypeScript
- C語言程序設計實驗指導與習題精解