前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux 编码风格总结

Linux 编码风格总结

作者头像
Jasonangel
发布2021-07-07 10:12:32
1.3K0
发布2021-07-07 10:12:32
举报
文章被收录于专栏:嵌入式Linux系统开发

Linux有独特的编码风格,在内核源代码下存在一个文件Documentation/CodingStyle,进行了比较详细的描述。

Linux程序的命名习惯和Windows程序的命名习惯及著名的匈牙利命名法有很大的不同。

在Windows程序和单片机程序中,习惯以如下方式命名宏、变量和函数:

代码语言:javascript
复制
#define PI 3.1415926 /* 用大写字母代表宏 */ 

int minValue, maxValue; /* 变量:第一个单词全小写,其后单词的第一个字母大写 */ 

void SendData(void); /* 函数:所有单词第一个字母都大写 */

这种命名方式在程序员中非常盛行,意思表达清晰且避免了匈牙利法的臃肿,单词之间通过首字母大写来区分。通过第1个单词的首字母是否大写可以区分名称属于变量还是属于函数,而看到整串的大写字母可以断定为 宏。实际上,Windows的命名习惯并非仅限于Windows编程,许多领域的程序开发都遵照此习惯。

但是Linux不以这种习惯命名,对于上面的一段程序,在Linux中它会被命名为:

代码语言:javascript
复制
#define PI 3.1415926 

int min_value, max_value; 

void send_data(void);

在上述命名方式中,下划线大行其道,不按照Windows所采用的用首字母大写来区分单词的方式。Linux的命名 习惯与Windows命名习惯各有千秋。

Linux 的代码缩进使用“TAB”键,不用空格键。

Linux 中代码括号“{”和“}”的使用原则如下。

1)对于结构体、if/for/while/switch语句,“{”不另起一行,例如:
代码语言:javascript
复制
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行,不要加“{”和“}”,例如:
代码语言:javascript
复制
for (i = 0; i < 10; i++) {
      a = c; 
}

应该改为:

代码语言:javascript
复制
for (i = 0; i < 10; i++) 
      a = c;
3)if和else混用的情况下,else语句不另起一行,例如:
代码语言:javascript
复制
if (x == y) { 
    ... 
} else if (x > y) { 
    ... 
} else { 
    ... 
}
4)对于函数,“{”另起一行,譬如:
代码语言:javascript
复制
int add(int a, int b) 
{ 
    return a + b; 
}

在switch/case语句方面,Linux 建议switch和case对齐,例如:

代码语言:javascript
复制
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 检查包含如下代码块的源程序:

代码语言:javascript
复制
for (i = 0; i < 10; i++) { 
      a = c; 
}

就会产生“WARNING:braces{}are not necessary for single statement blocks”的警告。

另外,注意上面 for 函数空格的使用,中间是有很多空格的,用以清晰代码。

在工程阶段,一般可以在 SCM 软件的服务器端使能 pre-commit hook,自动检查工程师提交的代码是否符合 Linux 的编码风格,如果不符合,则自动拦截。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-06-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 嵌入式Linux系统开发 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1)对于结构体、if/for/while/switch语句,“{”不另起一行,例如:
  • 2)如果if、for循环后只有1行,不要加“{”和“}”,例如:
  • 3)if和else混用的情况下,else语句不另起一行,例如:
  • 4)对于函数,“{”另起一行,譬如:
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档