Linux内核代码风格

这学期有个Linux驱动开发的课程,所以看了Linux内核源代码中的Documentation中关于代码风格的部分 发现关于缩进他说的是缩进使用八个字符,不能用空格缩进 其中还有一句是这么说的:有些异端运动试图将缩进变为4(乃至2)个字符深,这几乎相当于尝试将圆周率的值定义为3。 其实自己平时都喜欢用空格四个字符来进行缩进的= =! vi默认的制表符就是8个字符不知道是制表符原来就是这样定义的还是说后面的编辑器因为4字符的缩进习惯流行起来而进行的改变 现在让我看8字符的缩进真是特别难受了【【之前看google的代码都是两个空格缩进的感觉也是otl

关于大括号的时候,个人是习惯于左括号放在行尾右括号都放在行首单独一行,看到文档中的描述我又深深的觉得蛋要碎了。。 一般情况下所有的非函数语句块(if、switch、for、while、do)。跟我平时的习惯一样,但是函数就要使用左括号另开一行的方式。。说好的代码风格统一呢!给出的理由也真是强词夺理的感觉

    switch (action) { 
    case KOBJ_ADD: 
        return "add"; 
    case KOBJ_REMOVE: 
        return "remove"; 
    case KOBJ_CHANGE: 
        return "change"; 
    default: 
        return NULL; 
    } 

    int function(int x) 
    { 
        body of function 
    } 

额。上面的代码其实缩进是8字符的制表符,因为代码高亮插件所以显示成4个空格 语句剩余的部分还要紧接在右括号后面,放在typedef或者do-while里面上感觉蛮正常的,但是像这样

    if (x == y) { 
        .. 
    } else if (x > y) { 
        ... 
    } else { 
        .... 
    } 

真的就觉得怪异了,到现在基本上还没见过有人用这样的风格写if-else的。。

在命名方面倒是看到了这么一句话:在函数名中包含函数类型(所谓的匈牙利命名法)是脑子出了问题——编译器知道那些类型而且能够检查那些类型,这样做只能把程序员弄糊涂了。难怪微软总是制造出有问题的程序。 嗯。先不管匈牙利命名法本意是什么,微软本身使用的时候就已经产生误解错误的使用了,这样的命名方式看起来用起来真的都特别累人,做windows下面的游戏开发已经看的太多这样的东西了otl估计这句话也就是整篇文档自己唯一能赞同的一句了吧

Linux的注释风格一律使用C89标准的/* ...*/不知道是不是为了和以前的代码统一风格 而在微软的代码中看到的则是C99标准提倡的//注释

同样属GNU阵营的emacs都在文档里面被喷说格式化出来的都是他们之前说的异端,还要修改设置改成k&r要求的格式 就连专门为k&r格式开出一个选项的indent不也是默认4字符缩进嘛,要8字符缩进还要另外加参数ヽ(`⌒´)ノ 为Linux的代码统一一个规范风格是很好,但是做到这种程度感觉真是神经病了

额。虽然Kernighan和Ritchie写了The C Programming Language哪里都能看到对这本书的称赞,但是感觉这东西并不能表示k&r风格就是最好的blabla。 相信很多人学C也都是看这书来学的,自然就按照他们的风格来了。想想看国内多少看谭浩强的书学的C,绝大多数人码出来的代码还都是void main(){}这样的东西【说起来有的人说是因为当时谭浩强用的是旧标准所以才会有这样的东西,不过C99的确要求main()函数的返回值是int,但是c89也没有void main()这样的东西,最多也就main()这样而已。又不是说用在单片机或者什么特殊用途的地方才有void的main,况且那些编译器都还是特殊的编译器故意这样设计的。国内学校好像对标准这东西也不怎么重视,现在不还是一大片一大片的教科书都是void main()么,连用的IDE都还是TC或者VC6这样连C99标准都不支持的老古董。

他们写的书好坏是一回事。自己想说的是每个人刚开始接触的时候学到的是什么就认为该是怎么样,极力推崇或者有特别的好感,然后又去安利别人所以才。。。相信现在也不会有人喜欢匈牙利命名法吧,不过现在还有那么多人用这种方式写代码也是受了微软【MFC之类的。】的影响,一开始接触的是windows开发就觉得理所应当就是这种样子的。国外不还有某大牛14岁开始学了PHP后来大学CS课程学C的时候还一直困惑变量怎么可能不加$的么。

晚安。

Show Comments