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文档。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/543199.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Swift使用CoreLocation,你必须要看这一篇

CoreLocation,在我们这里讨论的是一个最常用的东西,就是用Location Manger获取用户当前的位置。 整个的来说非常简单。只要这样: import CoreLocation需要使用整个框架,那么引入整个框架就是必须的。然后需要在你的类里实现一个pr…

python全景图像拼接_Python+OpenCV实现图像的全景拼接

本文实例为大家分享了PythonOpenCV实现图像的全景拼接的具体代码,供大家参考,具体内容如下 环境:python3.5.2 openCV3.4 1.算法目的 将两张相同场景的场景图片进行全景拼接。 2.算法步骤 本算法基本步骤有以下几步: 步骤1&#x…

非你莫属 java全球排名_TIOBE:2018年5月全球编程语言排行榜

原标题:TIOBE:2018年5月全球编程语言排行榜TIOBE 刚刚发布了 5 月编程语言排行榜。Scala 经过长时间的沉淀,本月终于进入了 TIOBE 榜单的前 20 名。Scala 是一种 JVM 上运行的函数式编程语言,可与 Java 一起或作为 Java 的替代品使…

人生中最【无用】的二十件事

学会取舍,将是你人生的必修课。 丢掉这20件东西,你一定会成为更好的自己 我们之所以会觉得活的痛苦,活的乏味,根源在于你始终无法做到潇洒的放手。顾忌太多,想要的太多,最终一无所获。 你从幼稚走向成熟的过…

python web服务器 apache_Windows下搭建Apache+Django+Python Web服务环境

最近在学Django,想用Apache搭建一个服务器环境,因此在网上看了好多资料,很多都是用Python2.6和Apache2.2搭建的环境,不过我还是想用Python35和Apache24来搭建,具体环境如下: 参考资料: Apache配…

java删除javaee_JavaEE--集合--删除List中指定元素

一、Java 循环删除list中指定元素增强for循环删除指定元素Testpublic void test(){String[] strs{"a", "b", "c", "f", "b", "e", "d"};Listlist new ArrayList<>(Arrays.asList(strs));for (St…

无法从传输连接中读取数据:远程主机强迫_电力远程抄表中的应用

系统概述锐谷智联无线传输终端设备DT7710S&#xff0c;实现远程抄表应用。系统构成通过使用DT7710S&#xff0c;实现电表、水表等数据实时向中心传输。供应商可以通过数据中心的快速读取数据节省人力和时间。项目描述工业自动化的发展&#xff0c;远程抄表已成为智能电网系统中…

vmware nat模式网络不通_【EVENG入门】 03EVENG网络运行环境(桥接模式、NAT模式、Cloud连接虚拟设备)...

EEmulated&#xff0c;模拟VVirtual&#xff0c;虚拟EEnvironment&#xff0c;环境NNext&#xff0c;下一个GGeneration&#xff0c;一代也就是EVE-NG下一代模拟器虚拟环境当然&#xff0c;EVE也是黄昏&#xff0c;NG就是女鬼了EVE-NG黄昏的女鬼演示视频在此操作文档在此以下是…

金融行业 | 电子银行系统性能优化解决方案

随着互联网金融的蓬勃发展&#xff0c;以及来自支付宝等新兴网络金融机构的强大冲击&#xff0c;传统银行业纷纷加大对手机银行和网络银行等电子银行业务的投入力度&#xff0c;用户也从网银时代的足不出户转账付款发展到今天随时随地通过手机获取各种金融服务&#xff0c;前端…

Erlang/Elixir 社区摘要: 2016-05-21

Elixir 雷达, 49期 https://app.rdstation.com.br/mail/336031fa-3fe3-4d59-b05b-a86f8affa7c9如何使用环境变量来配置Exrm发布的应用 http://blog.plataformatec.com.br/2016/05/how-to-config-environment-variables-with-elixir-and-exrm/Merkle Trees in Elixir Merkle Tre…

git master主分支_Git分支管理策略及简单操作

前几天整理了一下之前项目的开发代码&#xff0c;当时使用了Git来进行代码版本管理。虽然本人熟悉常用的Git操作&#xff0c;但是对分支的管理经验非常欠缺。拿这个项目来说&#xff0c;在项目中有不下20个分支&#xff0c;每个分支间的继承关系相当之混乱&#xff0c;非常不利…

java在什么环境变量_Java-环境变量

很多同学不太明白环境变量的到底是什么具体有什么用? 这里阿风为不太明白的同学介绍一下.首先我们打开环境变量的位置.,这里以win10系统作为介绍在桌面邮件属性,如下然后点击高级系统变量接着点击环境变量然后你就能看到环境变量的具体设置界面了如图所示,环境变量分为用户变量…

git rebase用法_Git入门实战

如果给所有软件列出一个排行榜的话&#xff0c;那么Git定会名列前茅。Git对于代码项目的管理是具有划时代意义的&#xff0c;向Linus致敬&#xff0c;不但写出了可以与Windows争锋的Linux系统&#xff0c;还设计实现了如此强大的版本管理工具。当我了解Git后&#xff0c;真后悔…

linux md5 加密字符串和文件方法

linux md5 加密字符串和文件方法 MD5算法常常被用来验证网络文件传输的完整性&#xff0c;防止文件被人篡改。MD5全称是报文摘要算法&#xff08;Message-Digest Algorithm 5&#xff09;&#xff0c;此算法对任意长度的信息逐位进行计算&#xff0c;产生一个二进制长度为128位…

【无私分享:从入门到精通ASP.NET MVC】从0开始,一起搭框架、做项目(5.5) 登录功能的实现,完善登录功能...

索引 【无私分享&#xff1a;从入门到精通ASP.NET MVC】从0开始&#xff0c;一起搭框架、做项目 目录索引 简述 今天我们来完善我们的登录功能 项目准备 我们用的工具是&#xff1a;VS 2013 SqlServer 2012 IIS7.5 希望大家对ASP.NET MVC有一个初步的理解&#xff0c;理论性的…

jsonobject转list集合_怎样优雅的操作集合,CollectionUtils工具类正确使用姿势

点击上方"码之初"关注&#xff0c;选择"设为星标"与精品技术文章不期而遇来源&#xff1a;cnblogs.com/qdhxhz/p/10787130.html这篇讲的CollectionUtils工具类是在apache下的, 而不是springframework下的CollectionUtils。个人觉得CollectionUtils在真实项…

[c#基础]使用抽象工厂实现三层

引言 昨天加了一天班&#xff0c;今天闲来无事&#xff0c;就在想如何将之前的三层和最近一直在学的设计模式给联系在一起&#xff0c;然后就动手弄了个下面的小demo。 项目结构 项目各个层实现 Wolfy.Model层中有一个抽象类BaseModel.cs&#xff0c;User.cs是用户实体类&#…

场效应管原理_场效应管——不就是一个电控开关?

管在mpn中&#xff0c;它的长相和我们常面讲的三极管非常像&#xff0c;所以有不少修朋友好长时间还分不清楚&#xff0c;统一的把这些长相相同的三极管、场效应管、双二极管、还有各种稳压IC统统称作“三个脚的管管”&#xff0c;呵呵&#xff0c;如果这样麻木不分的话&#x…

三次握手面试题java_java面试题三次握手和四次挥手-嗨客网

题目对 tcp 了解吗&#xff1f;讲讲它的三次握手和四次挥手&#xff1f;为什么需要三次握手&#xff0c;为什么需要四次挥手。答案三次握手第一次握手&#xff1a;客户端向服务器发送连接请求&#xff0c;这个时候报文首部中的同步为 SYN 1&#xff0c;同时生成一个随机序列号…

运维经验分享(三)-- 解决Ubuntu下crontab不能正确执行脚本的问题

原创作品&#xff0c;允许转载&#xff0c;转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://dgd2010.blog.51cto.com/1539422/1676490 运维经验分享作为一个专题&#xff0c;目前共7篇文章 《运维经验分享&#xff08;一&#xff0…