2.1.1 代码缩进
代码缩进要使用制表符,也就是 TAB 键,不要使用空格键缩进!一般情况下一个 TAB 为4 个字符,但是 Linux 建议 TAB 键为 8 个字符,因为 8 个字符缩进比较多,因为有利于长时间阅读代码,可以很清晰的分辨出多级嵌套, 但是 8 个字符太多,代码向右移动的太远了,这样的话如果屏幕横向分辨率小的话每行编写的代码就会少,尤其是当一个代码块有多级缩进的时候, Linux 建议你应该修改你的代码。这里我设置的 TAB 键为 4 个字符,因为在我阅读 Linux内核源码的时候发现大部分都是 4 个字符。
在 switch 语句中,“swich”和“case”标签应该对齐处于同一列,不需要缩进 case 标签,如下所示:
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.1.3 代码行相关规范
1、 每一行的代码长度限制在 80 列。如果大于 80 列的话就要分成多行编写(其实当前高分辨屏幕已经很常见了,基本都是 1080P 起,甚至 4K,所以可以设置更大值), 并且在低优先级操作符处划分新行,操作符放在新行之首,划分出的新行要适当进行缩进, 一般进行一级缩进即可, 如下所示:
perm_count_msg.head.len = NO7_TO_STAT_PERM_COUNT_LEN
+ STAT_SIZE_PER_FRAM * sizeof( _UL );
act_task_table[frame_id * STAT_TASK_CHECK_NUMBER + index].occupied
= stat_poi[index].occupied;
if ((taskno < max_act_task_number)
&& (n7stat_stat_item_valid (stat_item)))
{
... // program code
}
2、 不要把多个语句放到一行里面,一行只写一条语句,如下所示:
不规范的写法:
a = x+y; b = x-y;
应该为:
a=x+y;
b=x-y;
3、 不要在一行里面防止多个赋值语句。
4、 if、 for、 do、 while、 case、 swich、 default 等语句单独占用一行。
2.1.4 括号与空格
1、括号
代码中用到大括号“{”和“}”的地方,应该把起始大括号“{”放到行尾,把结束大括号“}”放到行首,如下所示:
if (x is true) {
we do y
}
上面大括号“{”和“}”的用法适用于所有的非函数程序块, 如 if、 switch、 for、 do、 while 等,比如:
switch (action) {
case KOBJ_ADD:
return "add";
case KOBJ_REMOVE:
return "remove";
case KOBJ_CHANGE:
return "change";
default:
return NULL;
}
这里要注意!!!函数的起始大括号要放置到下一行的开头!!如下所示:
int function(int x)
{
body of function
}
结束的大括号“}”要独自占用一行,除非后面跟着同一个语句的其它剩余部分,比如 do 语句中的“while”或者 if 语句中的“else”,如下代码所示:
do {
body of do-loop
} while (condition);
和
if (x == y) {
..
} else if (x > y) {
...
} else {
....
}
当只有一个单独的语句的时候就可以不必要加大括号了,比如:
if (condition)
action();
和
if (condition)
do_this();
else
do_that();
在上面的 if else 条件语句中,所有的分支都只有一行语句,所以可以都不加大括号。但是如果在条件语句中任何一个分支有大于一行语句的时候都必须加上大括号,如下所示代码:
if (condition) {
do_this();
do_that();
} else {
otherwise();
}
2、空格
(1)、在一些关键字后面要添加空格,如:
if、 swich、 case、 for、 do、 while
但是不要在 sizeof、 typedof、 alignof 或者attribute这些关键字后面添加空格,因为这些大多数后面都会跟着小括号,因此看起来像个函数,如:
s = sizeof(struct file);
(2)、如果要定义指针类型,或者函数返回指针类型时,“*”应该放到靠近变量名或者函数名的一侧,而不是类型名,如:
char *linux_banner;
unsigned long long memparse(char *ptr, char **retptr);
char *match_strdup(substring_t *s);
(3)、二元或者三元操作符两侧都要加一个空格,例如下面所示操作符:
= + - < > * / % | & ^ <= >= == != ? :
(4)、一元操作符后不要加空格,如:
& * + - ~ ! sizeof typeof alignof __attribute__ defined
(5)、 后缀自加或者自减的一元操作符前后都不加空格,如:
++ --
(6)、“.”和“->”这两个结构体成员操作符前后不加空格。
(7)、逗号、分号只在后面添加空格,如:
int a, b, c;
(8)、注释符“/”和“/”与注释内容之间要添加一个空格。