学习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(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:”开头。

  编码是一种艺术。我们码的不仅仅是代码,更是一种情怀。

时间: 2024-08-08 19:51:46

学习Linux的编码风格的相关文章

linux编码风格(转)

1.https://wenku.baidu.com/view/29009a84bceb19e8b8f6badc.html 2.http://blog.csdn.net/stuartguo/article/details/52065642 Chinese translated version of Documentation/CodingStyle If you have any comment or update to the content, please post to LKML direc

Linux内核管理风格

内核社区管理是一个很独特很有挑战性的事情, 各系统维护者拥有很大的权利,却又无法命令和管理社区参与者: 一边不停的拒绝人们各种功能提交,一边却希望开发者留在自己的领域继续贡献力量.这篇文章向您揭示,成功的社区维护者如何展示领导力(捣糨糊).祝大家 假期快乐! 这是一个简短的文档,描述了Linux内核的首选(或编造的,取决于您问谁)管理风格. 它的目的是在某种程度上参照 process/coding-style.rst 主要是为了避免反复回答 [1] 相同(或类似)的问题. 管理风格是非常个人化的

学习linux命令,看这篇2w多字的linux命令详解

用心分享,共同成长 没有什么比每天进步一点点更重要了 本文已收录到我的github:https://github.com/midou-tech/articles/tree/master/docs/linux ,欢迎star和issues. 序言 ?本篇文章主要讲解了一些linux常用命令,主要讲解模式是,命令介绍.命令参数格式.命令参数.命令常用参数示例.由于linux命令较多,我还特意选了一些日常使用较为频繁的命令进行讲解,但还是免不了文章很长,建议大家收藏起来,用到的时候不会了再来阅读.当然

学习linux命令,看这篇2W多字的命令详解就够了

用心分享,共同成长 没有什么比每天进步一点点更重要了 本文已收录到我的github:https://github.com/midou-tech/articles/tree/master/docs/linux ,欢迎star和issues. 序言  本篇文章主要讲解了一些linux常用命令,主要讲解模式是,命令介绍.命令参数格式.命令参数.命令常用参数示例.由于linux命令较多,我还特意选了一些日常使用较为频繁的命令进行讲解,但还是免不了文章很长,建议大家收藏起来,用到的时候不会了再来阅读.当然

Net程序员学习Linux

Net程序员学习Linux 本次知识点:Linux系统的多终端切换,linux下的用户,linux远程访问工具使用,linux下重要的目录,命令的组成,通配符,linux的路径问题,文件操作的综合运用 为什么学习linux? 1.很多人都说.net程序员只会在Windows的环境下进行工作,压根就不懂Linux的使用,也不懂Linux的命令,只会用鼠标,只会在图形界面下工作.其实刚开始听,心里挺不爽的,作为一个.net程序员,我所熟悉的当然是在windows下工作,因为我们压根不需要在linux

新手学习Linux之grep

在马哥教育学习Linux第二周,这周又学习了一些Linux的基础知识,通过写这篇文章对自己的这周所学做一个简单的梳理和回顾. grep是一款Unix上的命令行工具,它最初设计开发用于Unix操作系统,但是如今几乎所有的类Unix(Unix-like)操作系统都在使用.grep是由Unix的创造者之一的Ken Thompson所编写,第一次出现在是version 4 Unix中 . grep是英文 globally search a regular expression and print的缩写,

辛星浅谈PHP的混乱的编码风格

我们都知道,各种编程语言都有自己的风格,即使是像C和C++那样一脉相承的语言(C++本意完全兼容C的语法),编程风格上还是有些差别,比如很典型的就是C++风格的单行注释和C风格的多行注释. 而虽然Java在很大程度上借鉴了C的语法,但是不可否认,Java的经典的大括号是左大括号是在类名或者函数名等同一行的,而C++风格的则是大括号另起一行,可能有些Java程序员和C++程序员这两种风格都用,但是如果大家多看看大师的编码风格,会发现其实大括号另起一行是典型的C++的风格,大括号不另起一行是典型的J

.Net程序员学习Linux(一)

本次知识点:Linux系统的多终端切换,linux下的用户,linux远程访问工具使用,linux下重要的目录,命令的组成,通配符,linux的路径问题,文件操作的综合运用 为什么学习linux? 1.很多人都说.net程序员只会在Windows的环境下进行工作,压根就不懂Linux的使用,也不懂Linux的命令,只会用鼠标,只会在图形界面下工作.其实刚开始听,心里挺不爽的,作为一个.net程序员,我所熟悉的当然是在windows下工作,因为我们压根不需要在linux环境使用编码工具,而且很多p

学习 Linux,101: Linux 命令行

概述 本教程将简要介绍 bash shell 的一些主要特性,涵盖以下主题: 使用命令行与 shell 和命令交互 使用有效的命令和命令序列 定义.修改.引用和导出环境变量 访问命令历史和编辑工具 调用路径内和路径外的命令 使用手册页了解命令 回页首 bash shell bashshell 是可用于 Linux 的几个 shell 之一,也被称为 Bourne-again shell,是根据一个早期的 shell (/bin/sh) 的创建者 Stephen Bourne 来命名的.Bash