【C】Coding Convention(tbd)


Linux kernel coding style(http://lxr.linux.no/linux/Documentation/CodingStyle)也算是coding convention的聖經吧。老實說我覺得規定coding style是對團體的考量多於個人的考量。按照這份文件,就我知道的寫一下。

Chapter 1: Indentation

  • tab/indent要八個,這也是programmer的麻吉vi預設的設定。
  • 一行有80個欄(columns),方便打印與觀看。

Chapter 2: Breaking long lines and strings

  • function的寫法,開始的大括號在function宣告下面。
  • if/witch/do-while的寫法,開始的大括號在function宣告後面。
  • 判斷是如果只有一個conditional statement可以不用加括號(不過這點本人不太建議)
  • if-else 就算單一個conditional statement也要加括號。

3.1: Spaces

  • 在下面的keywords後空一格
    if, switch, case, for, do, while but not with sizeof, typeof, alignof, or __attribute__. E.g.,
  • 運算元前後個各空一格。

Chapter 4: Naming

  • local的話,善用tmp這類的變數,不要把暫存的資料變數名稱取名的落落長,越短越好。
  • global的話,就要特別注意,如果取作foo就是自討苦吃。
  • 在這邊的function名稱不流行大大小小(大寫混合小寫的)命名宣告,以小寫配合底線去宣告,例如count_active_users()。

Chapter 5: Typedefs

  • 如果是struct宣告的話,使用
    struct virtual_container *a;
    不要使用
    vps_t a;
  • 後面哩哩叩叩講了一堆,有空再看。

Chapter 6: Functions

Chapter 7: Centralized exiting of functions

Chapter 8: Commenting

  • 這邊講解註解要寫些甚麼。
  • 這邊用的是 C89 "/* ... */" 這種格式。
  • 不要用C99-style "// ..." 的格式。

Chapter 9: You've made a mess of it

Chapter 10: Kconfig configuration files

Chapter 11: Data structures

Chapter 12: Macros, Enums and RTL

Chapter 13: Printing kernel messages

  • 確保不含糊的輸出你的debug訊息。
  • "dont" 應該改成 "do not” 或 "don’t”。
  • 不要只單純輸出數字,像“(%d)”。
  • 研究一下linux/device.h善用下面現成的debug宣告。
  • dev_err(), dev_warn(), dev_info()
  • pr_debug() and pr_info().
  • 用Kconfig options/-DDEBUG來掌控你的debug marco。
  • 研究一下VERBOSE_DEBUG/add dev_vdbg(),這是和Kconfig有關的。

Chapter 14: Allocating memory

  • 善用kernel提供的memory alloc。
  • kmalloc(), kzalloc(), kcalloc(), and vmalloc()
  • (tbd)

Chapter 15: The inline disease

  • 講了一些在那些狀況下不要用inline。可以好好看一下本文。
  • kmalloc()提供一個不錯的範例。
  • 其實個人覺得inline是由compiler決定要編成macro或function,這和compiler的版本比較有關係(看compiler寫得好不好)。

Chapter 16: Function return values and names

  • 分成 static和 publc function來說,public的要沿用下面規則
  • 如果是命令的話(ex. add_work),返回0代表成功;而-EBUSY代表失敗。
  • 如果是述語(predicate)的話(ex.pci_dev_present()),1代表成功;0的話是失敗。
  • point的話以NULL或ERR_PTR代表成功或失敗。

Chapter 17: Don't re-invent the kernel macros

  • 像以下這些現成的Macros就別再自行宣告了。
  • ARRAY_SIZE
  • FIELD_SIZEOF
  • max/min

Chapter 18: Editor modelines and other cruft

  • vim/emacs會把編輯器的配置利用註解方式(/* */)嵌入在source code中,記得把它拿掉。以免造成別人的不便。

Appendix I: References

  • 最後再丟幾本聖經給你。
  • The C Programming Language, Second Edition
  • The Practice of Programming
  • GNU manuals
  • WG14
  • Kernel CodingStyle

astyle http://astyle.sourceforge.net/

 

Ed32. Copyright 2008 All Rights Reserved Revolution Two Church theme by Brian Gardner Converted into Blogger Template by Bloganol dot com