代码风格
1缩进
-
使用Tab键来缩进,不要采用空格来代替。
-
switch语句中,case关键字同switch关键字为同一级别,例如:
switch (suffix) {
case'G':
case'g':
mem<<= 30;
break;
case'M':
case'm':
mem<<= 20;
break;
case'K':
case'k':
mem<<= 10;
/*fall through */
default:
break;
}
2大括号
-
起始大括号放在行尾,而结束大括号放在行首,例如:
if (x is true) {
wedo y
}
上面这条规则适用于所有非函数语句块,如if、switch、for、while、do等,如果是函数,则另不同。
-
函数起始大括号放置在下一行的开始处,例如:
int function(int x)
{
bodyof function
}
-
注意结束大括号独占一行,除非它后面跟着同一个语句的剩下部分,例如:
do{
body of do-loop
}while (condition);
if(x == y) {
...
}else if (x > y) {
...
}else {
...
}
-
当只有一个单独的语句的时候,可以不用加大括号。
if(condition)
action();
但是,这种情况例外:
if(condition) {
do_this();
do_this();
}else {
otherwise();
}
3空格
-
大多数关键字后面需要加上一个空格,例如:if,switch, case, for, do, while。但是sizeof,typedef, alignof,__attribute__这些关键字后面不要加空格,因为这些关键字看起来更像函数(这些关键字后面常常伴随着小括号一起使用,尽管这些小括号不是必须的)。
-
不要在小括号的两则加空格,例如:
s= sizeof( struct file );
-
当声明指针类型或者函数返回值为指针类型时,“*”首选是靠近变量名或者函数名,而不是类型名,例如:
char *linux_banner;
unsigned long long memparse(char *ptr, char **retptr);
char *match_strdup(substring_t *s);
-
在大多数二元和三元操作符两侧加上一个空格,例如:
=+ - < > * / % | & ^ <= >= == != ? :
但是一元操作符后面不要加空格:
&* + - ~ ! sizeof typedef alignof __attribute__ defined
后缀自加和自减操作符前不要加空格:
++--
前缀自加和自减操作符后不要加空格:
++--
“.”和”->”结构体成员操作符前后不要加空格。
另外,不要在行尾留下空格。
4注释
-
为了兼容,注释统一采用c89风格注释,/*… */。
-
多行注释首选风格是:
/*
*This is 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.
*/
5函数
-
函数应该简短而漂亮,并且一个函数只完成一件事情,函数应该可以一屏或者两屏显示完(ISO/ANSI屏幕大小是80*24)。
-
在源文件里,使用空行隔开不同的函数,如果该函数需要被导出,它的EXPORT*宏应该紧跟在该函数后面,例如:
int system_is_up(void)
{
return system_state == SYSTEM_RUNNING;
}
EXPORT_SYMBOL(system_is_up)
6断行
-
每一行长度限定80个字符,对于长的行和字符串需要断行,对于函数参数列表也适用,例如:
void fun(int a, int b, int c)
{
if(condition)
printk(KERN_WARNING“Warning this is a long prink with”
“3parameters a: %u b: %u”
“c:%u \n”, a, b, c);
else
next_statement;
}
7命名
-
对于函数和变量命名统一采用小写字母加下划线组成,不要采用大小写混合方式,更不要采用微软的匈牙利命名法。
-
对于宏定义和枚举常量采用大写字母加下划线组成。
-
函数类的变量命名应该简短明了,可以使用完整的英文单词或者适当的缩写。对于缩写,如果是短的单词可以通过去元音形成缩写,较长的单词可以取单词的头几个字母形成缩写,这就需要多看内核代码,总结出一些缩写惯例,例如count写成cnt,block写成blk,length写成len,window写成win,message写成msg,number写成nr,temporary写成temp,还可以进一步写成tmp,等等。
-
对于全局变量和函数的命名一定要详细,必须让使用者一眼就看出该函数是干什么的,例如,一个计算活动用户数量的函数,应该命名为count_active_users(),而不应该叫做cntuser()。
-
对于循环变量直接采用i,j, k变量就行了。