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;我宁可直接把括号去了……  

目录
相关文章
|
6天前
|
C++
【C++】一文深入浅出带你参透库中的几种 [ 智能指针 ]及其背后实现原理(代码&图示)
【C++】一文深入浅出带你参透库中的几种 [ 智能指针 ]及其背后实现原理(代码&图示)
|
6天前
|
C++ 数据格式
【C++】C++中的【文件IO流】使用指南 [手把手代码演示] & [小白秒懂]
【C++】C++中的【文件IO流】使用指南 [手把手代码演示] & [小白秒懂]
【C++】C++中的【文件IO流】使用指南 [手把手代码演示] & [小白秒懂]
|
6天前
|
编译器 C++
【C++】【C++的常变量取地址问题(对比C的不同)】const修饰的常变量&volatile修饰用法详解(代码演示)
【C++】【C++的常变量取地址问题(对比C的不同)】const修饰的常变量&volatile修饰用法详解(代码演示)
|
7天前
|
C++
【期末不挂科-C++考前速过系列P6】大二C++实验作业-模板(4道代码题)【解析,注释】
【期末不挂科-C++考前速过系列P6】大二C++实验作业-模板(4道代码题)【解析,注释】
【期末不挂科-C++考前速过系列P6】大二C++实验作业-模板(4道代码题)【解析,注释】
|
7天前
|
Serverless C++ 容器
【期末不挂科-C++考前速过系列P5】大二C++实验作业-多态性(3道代码题)【解析,注释】
【期末不挂科-C++考前速过系列P5】大二C++实验作业-多态性(3道代码题)【解析,注释】
|
7天前
|
C++ 芯片
【期末不挂科-C++考前速过系列P4】大二C++实验作业-继承和派生(3道代码题)【解析,注释】
【期末不挂科-C++考前速过系列P4】大二C++实验作业-继承和派生(3道代码题)【解析,注释】
|
7天前
|
编译器 C++
【期末不挂科-C++考前速过系列P3】大二C++第3次过程考核(20道选择题&12道判断题&2道代码题)【解析,注释】
【期末不挂科-C++考前速过系列P3】大二C++第3次过程考核(20道选择题&12道判断题&2道代码题)【解析,注释】
|
7天前
|
C++
【期末不挂科-C++考前速过系列P2】大二C++第2次过程考核(20道选择题&10道判断题&3道代码题)【解析,注释】
【期末不挂科-C++考前速过系列P2】大二C++第2次过程考核(20道选择题&10道判断题&3道代码题)【解析,注释】
|
8天前
|
存储 数据安全/隐私保护 C++
【期末不挂科-C++考前速过系列P1】大二C++第1次过程考核(3道简述题&7道代码题)【解析,注释】
【期末不挂科-C++考前速过系列P1】大二C++第1次过程考核(3道简述题&7道代码题)【解析,注释】
|
8天前
|
编译器 C语言 C++
【C++入门学习指南】:函数重载提升代码清晰度与灵活性
【C++入门学习指南】:函数重载提升代码清晰度与灵活性
19 0