Linux 有独特的编码风格,在内核源代码下存在一个文件Documentation/CodingStyle,进行了比较详细的描述。
Linux 程序的命名习惯和Windows 程序的命名习惯及著名的匈牙利命名法有很大的不同。
在Windows 程序中,习惯以如下方式命名宏、变量和函数:
#define PI 3.1415 // 用大写字母代表宏
int minValue, maxValue; // 变量:第一个单词全部小写,后面单词的第一个字母大写
void SendData(void); // 函数:所有单词第一个字母都大写
这种命名方式在程序员中非常盛行,意思表达清晰且避免了匈牙利法的臃肿,单词之间通过首字母大写来区分。通过第1 个单词的首字母是否大写可以区分名称属于变量还是属于函数,而看到整串的大写字母可以断定为宏。实际上,Windows 的命名习惯并非仅限于Windows 编程,许多领域的程序开发都遵照此习惯。
但是Linux 不以这种习惯命名,对于上面的一段程序,在Linux 中它会被命名为:
#define PI 3.1415
int min_value, max_value;
void send_data(void);
在上述命名方式中,下划线大行其道,不按照Windows 所采用的用首字母大写来区分单词的方式。Linux 的命名习惯与Windows 命名习惯各有千秋。
Linux 的代码缩进使用 “TAB”键。
Linux中代码括号 “{”和“}”的使用原则如下:
1. 对于结构体、if/for/while/switch语句, “{”不另起一行,例如:
struct var_data{
int len;
char data[0];
};
if(a == b){
a = c;
d =a ;
}
for(i = 0; i < 10; i++){
a = c;
d = a;
}
2. 如果if、for循环后面只有1行代码, 则可以不要加“{}”,例如:
for(i=0; i<10; i++){
a=c;
}
应该改为:
for(i=0; i<10; i++)
a=c;
3. if和else混用的时候, else语句不用另起一行, 例如:
if(x==y){
...
}else if(x>y){
...
}else{
...
}
4. 对于函数,“{” 需要另起一行, 例如:
int add(int a, int b)
{
return a+b;
}
在switch/case 语句方面, Linux建议switch和case对齐, 例如:
switch(suffix){
case 'G':
case 'g':
mem<<=30;
break;
case 'M':
case 'm':
mem<<=20;
// fall through
default:
break;
}
内核下的Documentation/CodingStyle 描述了Linux 内核对编码风格的要求,内核下的scripts/checkpatch.pl 提供了1 个检查代码风格的脚本。如果使用scripts/checkpatch.pl 检查包含如下代码块的源程序:
for(i=0; i<10; i++){
a=c;
}
就会产生“WARNING: braces {} are not necessary for single statement blocks”的警告。