设为首页 收藏本站
查看: 608|回复: 0

[经验分享] 学习Linux的编码风格

[复制链接]

尚未签到

发表于 2015-10-27 08:59:10 | 显示全部楼层 |阅读模式
  对于编码,每个码农或许都会有自己的一套风格,很多人可能对编码风格压根就不关心,因为最终编译器编译出来的目标代码并不会受影响。但是在开发一个大型项目时,花费时间成本最多的永远是开发者们之间的沟通与交流。保持编码风格的一致性可以在很大程度上提高编码效率,可以让其他人更容易读懂你的代码,也让你更容易读懂其他人的代码。
  在选择编码风格上,个人更青睐于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(0)
  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:”开头。
    编码是一种艺术。我们码的不仅仅是代码,更是一种情怀。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-131206-1-1.html 上篇帖子: 乾坤合一~Linux设备驱动之终端设备驱动 下篇帖子: Linux进程或线程绑定到CPU
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表