`
java-mans
  • 浏览: 11428987 次
文章分类
社区版块
存档分类
最新评论

C++代码风格的思考

 
阅读更多

C++/C就像他没有二进制标准一样,没有统一的代码风格,有unix风格的,有匈牙利风格的。自己很长一段时间也是比较郁闷,后来看到google C++ style的文档受益匪浅。但是STL、MS、Qt等代码风格各有不同,个人就产生了一些思考。

  1. 缩进
    1. tab还是空格?更多的文档推荐用空格去而不用tab,仍旧有些会说tab的好处。
    2. 2、4、8个空格?这对应着不同的缩进深度,2个空格是不是不明显?8个空格是不是按的手疼?4个空格似乎更好些,但是如果多级缩进就会比2个空格更早的超出80个字符的边界了。
  2. 括号
    1. 括号(或者其他运算符)是跟在行尾还是另起一行呢?放到行尾知道下一行还有内容,放到下一行的理由是你没有“;”这一行一定没有完成,更能知道单独一行是从上一行的继续。
  3. 变量与命名
    1. 类变量在前还是函数在前?
    2. 匈牙利命名,还是驼峰,还是全小写下划线分割?STL和unix系的大师们都是下划线分割,匈牙利似乎是MFC的专宠,而驼峰在Qt中大量使用而像java、C#这些语言也是这样的风格。
    3. 成员变量怎么定义,加m还是加m_还是加_后缀还是不加任何修饰
    4. 需不需要在变量前加类型标识?如果使用的都是原始类型的数据这似乎很有效的区分变量的类型,但是我们大量自定了很多类型似乎这条规则似乎就不那么好用了?
  4. 头文件定义顺序
    1. 先自定义头文件后系统头文件,能够更快地发现自定义文件中的冲突。
    2. 先系统头文件后自定义文件,减少隐藏头文件的依赖。
  5. 注释
    1. 注释的第一个目的就是让看代码的人快速的了解代码的意思,还有一个功能就是能够生成开发文档
    2. doxygen是一个比较通用的更加注释生成文档的工具,开源界更倾向于这种风格的注释。
  6. 文件
    1. 一个文件一个类还是按功能分文件?
    2. 文件尾多一个空行?似乎这没有什么害处。
  7. 总结
  1. 不管那种风格,在一个项目中都应该是统一的,不管你的好恶如何
  2. 什么风格的注释我所谓,关键你应该有注释并把事情说明白
  3. 不管什么风格,你的代码一定是优美整洁的
  4. 代码风格的一切是为了效率的平衡





分享到:
评论

相关推荐

    Absolute C++中文版(原书第2版)-完美的C++教程,文档中还包含英文版

    本书内容系统、全面,给出了大量代码示例、自测练习、编程提示和编程练习,并且提供了练习的解答。本书有利于初学者尽快掌握c++的编程知识,养成良好的编程习惯;具备相当编程经验的人,也可以从本书了解到使用c++的...

    Linux多线程服务端编程:使用muduo C++网络库

    《Linux多线程服务端编程:使用muduo C++网络库》主要讲述采用现代C++在x86-64 Linux上编写多线程TCP网络服务程序的主流常规技术,重点讲解一种适应性较强的多线程服务器的编程模型,即one loop per thread。...

    C++11中的时间库std::chrono(引发关于时间的思考)

    今天要总结学习的是 std::chrono 库,它是 C++11 标准时从 boost 库中引入的,其实在 C++ 中还有一种 C 语言风格的时间管理体系,像我们常见的函数 time()、clock()、localtime()、mktime() 和常见的类型 tm、time_t...

    MinGW嵌入式软件仿真平台

    http://www.51emb.com/forum_view.asp?forum_id=2&view_id=2468<br>or http://bbs.cnttr.com/archiver/?tid-113142.html<br><br>备注A:学习完该文档后,您将有基于makefile文件编译C/C++代码嵌入式软件开发基本...

    数据结构教程,好好打好基础

    Java语言基于C++思想,其编程风格与C++差别很小;C++ Builder又是基于C++;Delphi中的有关对象的概念与C++中的对象几乎完全一致。C++相比其他语言具有与计算机硬件集合紧密、代码效率高,这是Java语言和其他高级语言...

    MFC Windows程序设计(第二版) 源代码 任哲编著 [评价可免费]

    本书沿袭前一版的编写原则和风格,在读者学习了C/C++的基础上,从Windows SDK程序设计出发,用C++类对Windows应用程序进行了模拟封装,重点介绍MFC的应用程序框架。随后以精练的语言介绍Windows的图形图像处理、应用...

    养成良好的C++编程习惯之内存管理的应用详解

    如代码的风格、效率和可读性;模块设计的灵活性、可扩展性和耦合度等等。要试图把所有方面都阐述清楚必须花很多的精力,而且也不一定能阐述得全面。因此,本系列文章以软件开发的基础问题为切入点,阐述程序设计和...

    Fourinone分布式计算框架

    FourInOne(中文名字“四不像”)是一个四合一分布式计算框架,在写这个框架之前,我也看了老外写的其他开源框架,也对分布式计算进行了长时间的思考,当我们把复杂的hadoop当作一门学科学习时,似乎忘记了我们想...

    leetcode分类-LovingAlgorithm:恋上算法,Java版算法面试题解大全集

    和官网题解的区别:题解在笔者思考之后进行了优化,代码风格更好,而且笔者汇集了大量优质的解法,减少官网查看题解的信息筛选时间。对于题目分类更加细致到细小的知识点。 没有解析怎么办?代码风格好,几乎不需要...

    基于Vue的电影在线预订与管理系统-后台java代码(ssm)(毕业设计).zip

    对程序员来说,这意味着要注意其中的数据和操纵数据的方法(method),而不是严格地用过程来思考。在一个面向对象的系统中,类(class)是数据和操作数据的方法的集合。数据和方法一起描述对象(object)的状态和...

    本科毕业设计项目-Java电影推荐系统-管理后台.zip

    对程序员来说,这意味着要注意其中的数据和操纵数据的方法(method),而不是严格地用过程来思考。在一个面向对象的系统中,类(class)是数据和操作数据的方法的集合。数据和方法一起描述对象(object)的状态和...

    毕业设计管理系统java服务端,采用spring mvc.zip

    对程序员来说,这意味着要注意其中的数据和操纵数据的方法(method),而不是严格地用过程来思考。在一个面向对象的系统中,类(class)是数据和操作数据的方法的集合。数据和方法一起描述对象(object)的状态和...

    毕业设计——流媒体视频直播服务器(Java + MySQL + FFmpeg + RTSP + RTP).zip

    对程序员来说,这意味着要注意其中的数据和操纵数据的方法(method),而不是严格地用过程来思考。在一个面向对象的系统中,类(class)是数据和操作数据的方法的集合。数据和方法一起描述对象(object)的状态和...

    毕业设计-->物流管理系统的设计与实现(java).zip

    对程序员来说,这意味着要注意其中的数据和操纵数据的方法(method),而不是严格地用过程来思考。在一个面向对象的系统中,类(class)是数据和操作数据的方法的集合。数据和方法一起描述对象(object)的状态和...

    超市供销存管理系统,超市管理系统,供销存管理系统,进销存,JAVA+MySQL毕业设计.zip

    对程序员来说,这意味着要注意其中的数据和操纵数据的方法(method),而不是严格地用过程来思考。在一个面向对象的系统中,类(class)是数据和操作数据的方法的集合。数据和方法一起描述对象(object)的状态和...

    毕业设计---基于java的软件资源库的实现(后端).zip

    对程序员来说,这意味着要注意其中的数据和操纵数据的方法(method),而不是严格地用过程来思考。在一个面向对象的系统中,类(class)是数据和操作数据的方法的集合。数据和方法一起描述对象(object)的状态和...

    毕业设计,关于新浪微博API的Java编程..zip

    对程序员来说,这意味着要注意其中的数据和操纵数据的方法(method),而不是严格地用过程来思考。在一个面向对象的系统中,类(class)是数据和操作数据的方法的集合。数据和方法一起描述对象(object)的状态和...

    基于java的校园二手交易系统毕业设计.zip

    对程序员来说,这意味着要注意其中的数据和操纵数据的方法(method),而不是严格地用过程来思考。在一个面向对象的系统中,类(class)是数据和操作数据的方法的集合。数据和方法一起描述对象(object)的状态和...

    毕业设计基于Cesium时空数据可视化后台Java SSM框架.zip

    对程序员来说,这意味着要注意其中的数据和操纵数据的方法(method),而不是严格地用过程来思考。在一个面向对象的系统中,类(class)是数据和操作数据的方法的集合。数据和方法一起描述对象(object)的状态和...

Global site tag (gtag.js) - Google Analytics