学习Linux的编码风格
对于编码,每个码农或许都会有自己的一套风格,很多人可能对编码风格压根就不关心,因为最终编译器编译出来的目标代码并不会受影响。但是在开发一个大型项目时,花费时间成本最多的永远是开发者们之间的沟通与交流。保持编码风格的一致性可以在很大程度上提高编码效率,可以让其他人更容易读懂你的代码,也让你更容易读懂其他人的代码。
在选择编码风格上,个人更青睐于Linux的编码风格,所以特意总结了一下:
1、缩进
Linux的缩进风格是用制表符(tab)每次缩进八个字符长度。这里强调的是制表符,并不是用几个空格符来替代。如果在Linux里面八个字符长度的制表符显得太长的话,那我们还是最好来修改自己的代码吧!最好不要在代码中用四层及以上的嵌套缩进。在switch...case...语句中,switch与case具有相同的缩进。
在Windows上面默认制表符是4个字符长度,所以不必去在意到底几个字符长度,只要每次缩进使用制表符即可。
2、括号
Linux的风格是:
(1)对于函数的左右括号,左右括号分别为单独的一行:
int func()
{
/* .... */
}
(2)对于控制语句中的左右括号,左括号紧跟在语句的后面,与语句在相同的一行,而右括号新起一行,作为该行的第一个字符:
if (x){
/* .... */
}
如果接下来的部分是相同语句的一部分,那么右括号不单独占一行:
if (x){
/* ... */
}else{
/* ... */
}
或者
do {
/* ... */
}while(x);
如果不是一定要括号的语句,就忽略它:
if (x)
do_something();
else
do_otherthing();
但是对于条件语句来说,如果一个分支是一行语句,另一个语句是多行,则需要保持一致,使用花括号:
if (condition){
do_this();
do_that();
}else{
do_something();
}
3、空格
(1)在关键字“if,switch,case,for,do,while”之后需要加上空格
if (condition)
(2)在关键字“sizeof,typedef,alignof,__attribute__”之后不需要加空格:
sizeof(int);
(3)在括号里的表达式两边不需要加空格;
(4)大多数的二元和三元运算符两边需要加空格,“= + - < > * / % | & ^ <= >= == != ? :”;
(5)一元运算符后面不加空格,“& * + - ~ ! sizeof typedef alignof __attribute__”;
(6)在前缀自增自减运算符之后和后缀自增自减运算符之前不需要空格,“++ --”;
(7)结构成员运算符的两边不需要空格,“. ->”;
4、命名规范
Linux的名称中不允许使用混合的大小写字符。局部变量应该尽量可以清楚地表明它的用途;全局变量和函数应该选择包含描述性内容的名称。
5、函数
函数的代码程度不应该超过两屏,局部变量不应该超过10个。一个很大的函数尽量分成一些更短小的函数的组合,每个函数应该功能单一并且实现精准。如果担心函数调用带来开销,可以把小函数声明为inline。
如果函数的名称是一种动作或者命令式的语句,应该以错误代码的形式返回(一般0表示成功,-Exxx形式的负数表示错误),如:do_something()
如果函数的名称是判断语句,则返回值应该类似于布尔值(1表示成功,0表示失败),如:something_is_exist()
6、宏
多行的宏定义要用"do...while"来封装,如:
#define func(a,b,c) \
do { \
if (a > b) \
do_something(c); \
}while()
7、注释
注释应该描述的是代码要做什么和为什么要这么做,而不应该描述具体通过什么方式来实现。如何实现应该通过代码本身来展现。不要把作者,日期等一些没有意义的内容写在注释里面,这些信息应该集中写在文件最开头的地方。在Linux中采用C89的注释风格“ /* ... */ ”,不采用C99的“ // .... ”
/*
* get_foo() - return the current value of foo
* We need this to calculate the bar ratio. This can sleep,
* so do not call while holding a lock
*/
int get_foo(){
...
return foo;
}
只有在特殊情况下才会在函数里面注释。比如声明一个bug或者某个重要的假设。在注释里面,重要信息以“XXXX:”开头。
编码是一种艺术。我们码的不仅仅是代码,更是一种情怀。
学习Linux的编码风格的更多相关文章
- [中英对照]Linux kernel coding style | Linux内核编码风格
Linux kernel coding style | Linux内核编码风格 This is a short document describing the preferred coding sty ...
- Linux学习笔记:【004】Linux内核代码风格
Chinese translated version of Documentation/CodingStyle If you have any comment or update to the c ...
- 学习linux命令,看这篇2w多字的linux命令详解
用心分享,共同成长 没有什么比每天进步一点点更重要了 本文已收录到我的github:https://github.com/midou-tech/articles/tree/master/docs/li ...
- 学习 Linux,101: Linux 命令行
概述 本教程将简要介绍 bash shell 的一些主要特性,涵盖以下主题: 使用命令行与 shell 和命令交互 使用有效的命令和命令序列 定义.修改.引用和导出环境变量 访问命令历史和编辑工具 调 ...
- Android编码风格
整理一下51CTO学院中张凌华老师讲的编码风格课程 一. 项目开发目录命名: Requirement - 需求相关文档 Design - 设计 Planning&Log - 计划,日志,会议 ...
- 辛星浅谈PHP的混乱的编码风格
我们都知道.各种编程语言都有自己的风格,即使是像C和C++那样一脉相承的语言(C++本意全然兼容C的语法).编程风格上还是有些区别.比方非常典型的就是C++风格的单行凝视和C风格的多行凝视. 而尽管J ...
- .Net程序员学习Linux(一)
本次知识点:Linux系统的多终端切换,linux下的用户,linux远程访问工具使用,linux下重要的目录,命令的组成,通配符,linux的路径问题,文件操作的综合运用 为什么学习linux? 1 ...
- Net程序员学习Linux
Net程序员学习Linux 本次知识点:Linux系统的多终端切换,linux下的用户,linux远程访问工具使用,linux下重要的目录,命令的组成,通配符,linux的路径问题,文件操作的综合运用 ...
- 大名鼎鼎的Requests库用了什么编码风格?
原文:https://www.kennethreitz.org/essays/kenneth-reitzs-code-style 作者:Kenneth Reitz 原题:Kenneth Reitz’s ...
随机推荐
- 【C#】DataRowState演变备忘
环境:.net 2.0 DataRow的行状态一段时间不用就会吃不准,记录一下,备查. DataRowState 演变表 行属于如下状态时进行右边操作→ 后的状态演变 添加到表 dt.Rows.Add ...
- jquery制作论坛或社交网站的每天打卡签到特效
效果:http://hovertree.com/texiao/jquery/50/ 现在许多社区,购物等网站都设置签到功能,打开可以收获经验.虚拟币等,提高用户粘性,增加浏览量,是一个不错的功能.本文 ...
- 初识Mybatis框架,实现增删改查等操作(动态拼接和动态修改)
此第一次接触Mybatis框架确实是有点不适应,特别是刚从Hibernate框架转转型过来,那么为什么要使用Mybatis框架,Mybatis框架和Hibernate框架又有什么异同呢? 这个问题在我 ...
- 微信JSApi支付~集成到MVC环境后的最后一个坑(网上没有这种解决方案)
返回目录 大叔第一人 之前写了关于微信的坑<微信JSApi支付~坑和如何填坑>,今天将微信的jsapi支付封装到了MVC环境里,当然也出现了一些新的坑,如支付参数应该是Json对象而不是J ...
- SpringMVC的注解开发入门
1.Spring MVC框架简介 支持REST风格的URL 添加更多注解,可完全注解驱动 引入HTTP输入输出转换器(HttpMessageConverter) 和数据转换.格式化.验证框架无缝集成 ...
- ABP之模块分析
本篇作为我ABP介绍的第三篇文章,这次想讲下模块的,ABP文档已经有模块这方面的介绍,但是它只讲到如何使用模块,我想详细讲解下它模块的设计思路. ABP 框架提供了创建和组装模块的基础,一个模块能够依 ...
- [注意]SerialPort操作PCI-1621D多串口卡,出现异常"参数不正确"
开发LED大屏显示.40-20mA模拟量输出的时候,经常要与串口打交道.但是Windows自带的SerialPort串口操作组件貌似兼容性 不是太好,或是SerialPort本身有BUG,在操作PCI ...
- JQ常用代码
页面加载的时候添加一个定时器,0秒之后执行hideURLbar函数. hideURLbar函数将页面滚动至坐标(0,1) <script type="application/x-jav ...
- xml与datatable类型互换
//已测 private DataTable ConvertXMLToDataSet(string xmlData) { StringReader stream = null; XmlTextRead ...
- C#变量、输入、数据类型的自动转换