linux内核_Linux内核编程风格简介

01不同的语言风格

当今世界上一共有5000多种语言。不同的国家、民族和地区,说着不同的语言。每个民族不一定有自己的文字,但一般都会有自己的语言。即使是同一种语言,在不同的时代、不同的地区和群体,说话的方式和语言风格也各不相同。同样是刘备《三顾茅庐》的故事,如果换成不同的人去说,你会发现说话方式和语言风格大相径庭:

TVB腔:呐,做人呢,最重要的是开心。玄德你饿不饿,我煮碗面给你吃。

日系风:玄德桑是怀着对天下美好的期盼来的吧,真是让人无法拒绝呢。

欧美翻译腔:噢!上帝!你怎么来三次了!我对上帝发誓,我不是故意要你等的!

东北腔:艾玛!您来就来吧,您还来三次,这整滴啥玩意儿啊?快进来吧,都哆嗦了。

班主任腔:让你来三次,是为了你好!以后你就知道了!

知乎大V风:谢邀,人在南阳,刚下飞机。作为卧龙岗小透明,圈子小熟人多所以先匿了。一觉起来这么多赞,看到玄德兄等了这么久,又实名反对高赞答案,不知能否私信分享下:吃了三次闭门羹是一种怎样的体验?

如果换成郭敬明,话风可能又变成这样:在这无尽的寂寞里,时间化为了灰烬,大雪逆转了天地。而我在这里静静地等待,等待宿命之轮开启它的轮转。我知道你一定会再来,第三次,玄德,我会让你,自由地…

02C语言的编程风格

C语言也是一种语言,同样可以匹配语言的基本三要素:语音、词汇和语法。同样是C语言编程,不同的平台、项目、公司、社群,编码风格也是风格迥异,各不相同。

在Windows下编写一个C语言函数,我们通常使用下面的命名方式:

void OpenDoor(void);

而在Linux下编写一个C语言函数,我们更喜欢使用下面的命名方式:

void open_door(void);

而同样是在Linux环境下,如果是一个GNU项目,函数的命名通常又变成了这样:

voidopen_door (void);

不同的开发环境,不同的平台,不同的公司,不同的项目,编程规范和代码风格可能各不相同,我们需要遵守的原则其实也很简单:入乡随俗。

03Linux内核编码风格

在Linux内核源码的Documentation/process/coding-style.rst文件里,详细讲述了Linux内核编程时需要遵循的一些编程规范。

1.缩进

代码的缩进使用tab键,建议是8个空格

22f8759211798891171e7c898ba15a17.png

大家在编写代码时,缩进要使用tab键,而不是直接敲4个或8个空格。tab键的缩进可以通过IDE的选项调节,也可以在vim的vimrc配置文件中设置。使用tab键缩进8个空格,可以让代码的层次结构更加清晰,但带来的弊端是当程序嵌套的层次很深时,缩进会使每一行写代码的空间大大减少。为了预防这种情况发生,在Linux内核源码的switch-case语句中,case语句一般都是和switch顶格写,不缩进。

2.空格

57a97c0bd89771bb0aecd41ffc3b8fb6.png

在Linux内核中,使用空格的地方主要分布如下

  • 在if、switch、case、for、do、while后,和(之间要加一个空格

  • 二元运算符:+、-、|、*、=、== 等两侧一般要加空格

  • 函数名、一元运算符++、--等后面一般不用加空格

  • 小括号里表达式的两侧一般不要加空格

  • sizeof、typeof、alignof、__attribute__后面一般不要加空格

3.换行

be0aa31a8b4a5ba8f9c7f556ca94e8af.png

一般在if、switch、case、for、do、while后的大括号不能单独占一行,但函数的一对大括号可以单独各占一行。函数的参数一行写不下,可以换行写,各个函数之间一般也要空一行。

在if-else分支结构中,else分支和大括号一般不会单独占一行,而是和if分支的}写在同一行。

04格式化工具:indent

Linux提供了一个好用的工具:indent,可以对我们编写的C语言代码进行格式检查。indent的安装和使用都很方便:

# apt install indent# indent -linux -ce hello.c

indent默认的风格是GNU,如果你编写的程序代码很乱,没有留空格,没有换行,没有缩进,阅读性很差,如下所示:

2b8adde2aa72dc2ed3ad9cf4fa377377.png

我们使用上面的indent命令对这段代码进行处理后,再次使用vim打开,你会发现代码风格就变成了下面这个样子,瞬间整洁了不少:

c8f19e865a59840ae3e6317b1e5aada3.png

在 indent -linux  -ce main.c命令中,-linux参数表示按照Linux风格来格式化代码:空格、缩进按照内核的规范,大括号不单独占一行。-ce参数表示else分支不单独占一行,如果你使用-nce参数,else分支则会单独占一行。

除此之外,indent工具还有很多可选参数供我们参考,你可以通过indent --help或man indent命令来查看这些参数的详细使用说明。

如果你想有自己的编码风格,你可以将这些格式化参数保存在~/.indent.pro文件中。以后你每次使用indent xx.c格式化一个C文件时,indent就会根据这个配置文件中保存的参数来格式化xx.c文件。

Linux内核源码中的scripts/Lindent脚本,可以对Linux内核代码进行格式化设置。这个Lindent脚本内部其实也是通过调用indent命令来运行的。

05小结

以上给大家介绍了Linux内核中的代码风格和格式化工具indent的使用。由于篇幅关系只介绍了其中一小部分,更多的编码规范和细节可以去阅读内核源码中的Documentation/process/coding-style.rst文档。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值