当今世界上一共有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个空格
大家在编写代码时,缩进要使用tab键,而不是直接敲4个或8个空格。tab键的缩进可以通过IDE的选项调节,也可以在vim的vimrc配置文件中设置。使用tab键缩进8个空格,可以让代码的层次结构更加清晰,但带来的弊端是当程序嵌套的层次很深时,缩进会使每一行写代码的空间大大减少。为了预防这种情况发生,在Linux内核源码的switch-case语句中,case语句一般都是和switch顶格写,不缩进。
2.空格
在Linux内核中,使用空格的地方主要分布如下
在if、switch、case、for、do、while后,和(之间要加一个空格
二元运算符:+、-、|、*、=、== 等两侧一般要加空格
函数名、一元运算符++、--等后面一般不用加空格
小括号里表达式的两侧一般不要加空格
sizeof、typeof、alignof、__attribute__后面一般不要加空格
3.换行
一般在if、switch、case、for、do、while后的大括号不能单独占一行,但函数的一对大括号可以单独各占一行。函数的参数一行写不下,可以换行写,各个函数之间一般也要空一行。
在if-else分支结构中,else分支和大括号一般不会单独占一行,而是和if分支的}写在同一行。
04格式化工具:indentLinux提供了一个好用的工具:indent,可以对我们编写的C语言代码进行格式检查。indent的安装和使用都很方便:
# apt install indent# indent -linux -ce hello.c
indent默认的风格是GNU,如果你编写的程序代码很乱,没有留空格,没有换行,没有缩进,阅读性很差,如下所示:
我们使用上面的indent命令对这段代码进行处理后,再次使用vim打开,你会发现代码风格就变成了下面这个样子,瞬间整洁了不少:
在 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文档。