代码风格

代码风格

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

    }

    上面这条规则适用于所有非函数语句块,如ifswitchforwhiledo等,如果是函数,则另不同。

  • 函数起始大括号放置在下一行的开始处,例如:

    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写成cntblock写成blklength写成lenwindow写成winmessage写成msgnumber写成nrtemporary写成temp,还可以进一步写成tmp,等等。

  • 对于全局变量和函数的命名一定要详细,必须让使用者一眼就看出该函数是干什么的,例如,一个计算活动用户数量的函数,应该命名为count_active_users(),而不应该叫做cntuser()

  • 对于循环变量直接采用i,j, k变量就行了。

你可能感兴趣的:(代码风格)