Linux有独特的编码风格,在内核源代码下存在一个文件Documentation/CodingStyle,进行了比较详细的描述。
Linux程序的命名习惯和Windows程序的命名习惯及著名的匈牙利命名法有很大的不同。
在Windows程序和单片机程序中,习惯以如下方式命名宏、变量和函数:
#define PI 3.1415926 /* 用大写字母代表宏 */
int minValue, maxValue; /* 变量:第一个单词全小写,其后单词的第一个字母大写 */
void SendData(void); /* 函数:所有单词第一个字母都大写 */
这种命名方式在程序员中非常盛行,意思表达清晰且避免了匈牙利法的臃肿,单词之间通过首字母大写来区分。通过第1个单词的首字母是否大写可以区分名称属于变量还是属于函数,而看到整串的大写字母可以断定为 宏。实际上,Windows的命名习惯并非仅限于Windows编程,许多领域的程序开发都遵照此习惯。
但是Linux不以这种习惯命名,对于上面的一段程序,在Linux中它会被命名为:
#define PI 3.1415926
int min_value, max_value;
void send_data(void);
在上述命名方式中,下划线大行其道,不按照Windows所采用的用首字母大写来区分单词的方式。Linux的命名 习惯与Windows命名习惯各有千秋。
Linux 的代码缩进使用“TAB”键,不用空格键。
Linux 中代码括号“{”和“}”的使用原则如下。
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;
}
for (i = 0; i < 10; i++) {
a = c;
}
应该改为:
for (i = 0; i < 10; i++)
a = c;
if (x == y) {
...
} else if (x > y) {
...
} else {
...
}
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;
break;
case 'K':
case 'k':
mem <<= 10;
/* 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”的警告。
另外,注意上面 for 函数空格的使用,中间是有很多空格的,用以清晰代码。
在工程阶段,一般可以在 SCM 软件的服务器端使能 pre-commit hook,自动检查工程师提交的代码是否符合 Linux 的编码风格,如果不符合,则自动拦截。
本文分享自 嵌入式Linux系统开发 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!