C/C++代码格式规则中比较有争议的几处

简介:     原地址:http://bbs.csdn.net/topics/320120108  从一个人的代码格式,其实可以猜出此人的C/C++大致水平,凡是写过正式项目的人,代码风格不会太差的,有些代码风格规则得到了普遍认同,有些确仍存争议。

    原地址:http://bbs.csdn.net/topics/320120108

  从一个人的代码格式,其实可以猜出此人的C/C++大致水平,凡是写过正式项目的人,代码风格不会太差的,有些代码风格规则得到了普遍认同,有些确仍存争议。

    下面列举一些仍存争议的代码风格。


1.空参数的函数是否得用fuc(void)格式
    多次在一些书里看到空参数的函数得用void来填补形参表,但是在实际编程以及见到过的许多项目里——无论是开源项目还是微软的一些库,fuc()仍然是很普遍的写法。
    观点:是否加void对于代码逻辑本身没有任何影响,可读性上差别也不大,除非项目硬性要求或者初学的时候养成了习惯,个人感觉是不是一定要加void不那么重要。正因为如此,fuc()仍然大行其道,通常也不被看做明显的风格缺陷。

2.大括号的对齐

C/C++ code
?
1
2
3
4
5
6
7
8
9
     if ()
     {
  
     }
  
     if (){
  
     }

    这两种代码那种风格更好呢?VC、VA、Eclipse的自动格式化倾向于前者,但是有许多开源项目和教材上的代码又明显是由后者,谁优谁劣恐怕又要牵涉到操作系统和编程环境的口水仗了……很明显,微软提倡的代码风格明显属于前者,而后者在开源项目中大量出现。
    观点:入乡随俗,在VC里写后者不伦不类,跟着VS+VA的自动格式化走吧;Linux下倒是随便,看项目组整体的要求。

3.单行循环和单行条件的大括号是否省略
    一般书上说任何时候都加大括号是比较好的选择。当然,保证没有歧义的情况下(主要是if、else的歧义),不加括号也能让代码显得更紧凑。
    提到这点主要是反驳一个观点——有人说加不加括号会造成效率差别……这完全是无稽之谈,经过测试,在VS2008中,无论什么优化选项,单行循环加不加括号生成的汇编代码都是一样的,如果你是TC测出的效率差别,那只能说编译器太烂了!
    观点:我个人的观点倒不像书上那么绝对(任何时候都加)。我感觉条件语句加括号避免歧义是应该的;而单行循环一般没有歧义,而且不加括号显得很紧凑,我推荐不加;那种多层的循环和条件,加括号增加可读性,最好加上。

4,变量初始化
    本来没有任何争议,但是无论谭浩强的书还是“权威”的K&R的书做的都不好,才造成了许多人认为不初始化才是“权威”。
    观点:没什么说的,不初始化的人一看就知道没写过几行代码,没有为那种因为不初始化而造成的bug烦恼过。

5.变量声明位置
    由于受变量位置较严格的C标准影响,许多人似乎喜欢在头部一股脑的把变量声明完。这自然是有道理的,纯C编译器要求这样声明(比如VS2005、VS2008加上/TC选项或者使用extern "C")。不过C++里的兼容的C就没这个限制了,因为C++可能有较大的自定义类型,开始就声明有效率损失。
    观点:请看你的编译器,C++的自由方式自然好,但如果编译器限制就没办法了。我提醒注意的是,如果C++方式编译,就没有必要死抱C的声明格式了。

6.短代码的换行
C/C++ code
?
1
2
3
4
i++;j--;
{ return  0;}
。。。。。

    在项目代码中我们经常能看到这样的代码,因为短小,就没有换行了。
    观点:我看这种代码总是不舒服,特别是那个return 0;我宁可直接把括号去了……  

目录
相关文章
|
2月前
|
C++
C++ 语言异常处理实战:在编程潮流中坚守稳定,开启代码可靠之旅
【8月更文挑战第22天】C++的异常处理机制是确保程序稳定的关键特性。它允许程序在遇到错误时优雅地响应而非直接崩溃。通过`throw`抛出异常,并用`catch`捕获处理,可使程序控制流跳转至错误处理代码。例如,在进行除法运算或文件读取时,若发生除数为零或文件无法打开等错误,则可通过抛出异常并在调用处捕获来妥善处理这些情况。恰当使用异常处理能显著提升程序的健壮性和维护性。
50 2
|
2月前
|
算法框架/工具 C++ Python
根据相机旋转矩阵求解三个轴的旋转角/欧拉角/姿态角 或 旋转矩阵与欧拉角(Euler Angles)之间的相互转换,以及python和C++代码实现
根据相机旋转矩阵求解三个轴的旋转角/欧拉角/姿态角 或 旋转矩阵与欧拉角(Euler Angles)之间的相互转换,以及python和C++代码实现
105 0
|
1天前
|
C++
继续更新完善:C++ 结构体代码转MASM32代码
继续更新完善:C++ 结构体代码转MASM32代码
|
1天前
|
C++ Windows
HTML+JavaScript构建C++类代码一键转换MASM32代码平台
HTML+JavaScript构建C++类代码一键转换MASM32代码平台
|
1天前
|
C++
2合1,整合C++类(Class)代码转换为MASM32代码的平台
2合1,整合C++类(Class)代码转换为MASM32代码的平台
|
1天前
|
前端开发 C++ Windows
C++生成QML代码与QML里面集成QWidget
这篇文章介绍了如何在C++中生成QML代码,以及如何在QML中集成QWidget,包括使用Qt Widgets嵌入到QML界面中的技术示例。
|
2月前
|
程序员 C++ 开发者
C++命名空间揭秘:一招解决全局冲突,让你的代码模块化战斗值飙升!
【8月更文挑战第22天】在C++中,命名空间是解决命名冲突的关键机制,它帮助开发者组织代码并提升可维护性。本文通过一个图形库开发案例,展示了如何利用命名空间避免圆形和矩形类间的命名冲突。通过定义和实现这些类,并在主函数中使用命名空间创建对象及调用方法,我们不仅解决了冲突问题,还提高了代码的模块化程度和组织结构。这为实际项目开发提供了宝贵的参考经验。
47 2
|
2月前
|
C++
拥抱C++面向对象编程,解锁软件开发新境界!从混乱到有序,你的代码也能成为高效能战士!
【8月更文挑战第22天】C++凭借其强大的面向对象编程(OOP)能力,在构建复杂软件系统时不可或缺。OOP通过封装数据和操作这些数据的方法于对象中,提升了代码的模块化、重用性和可扩展性。非OOP方式(过程化编程)下,数据与处理逻辑分离,导致维护困难。而OOP将学生信息及其操作整合到`Student`类中,增强代码的可读性和可维护性。通过示例对比,可以看出OOP使C++代码结构更清晰,特别是在大型项目中,能有效提高开发效率和软件质量。
23 1
|
2月前
|
C++
C++代码来计算一个点围绕另一个点旋转45度后的坐标
C++代码来计算一个点围绕另一个点旋转45度后的坐标
46 0
|
2月前
|
C++
Resharper c++ 使用Enter自动补全代码
Resharper c++ 使用Enter自动补全代码
33 0
下一篇
无影云桌面