使用C++在控制语句中放置空格的编码样式建议/基本原理

Mar*_* Ba 15 c++ coding-style

鉴于以下两种编码风格,请在编写C++代码时指定一个理由(一些优点/缺点),以解释为什么一个可能优于另一个.

( 不要带"并不重要"回答,"只要坚持一个";等等.现在的问题是关于具体可能PRO /缺点(如果有的话)的两个间隔低于风格感谢.)

// VARIANT A (NO space after control keyword / space before curly brace)
if(condition) {
  // ...
}
else if(c2) {
  // ...
}
else {
  // ...
}

for(int i=0; i<e; ++i) {
  // ...
}

...

// vs. VARIANT B (space after control keyword / NO space before curly brace)

if (condition){
  // ...
}
else if (c2){
  // ...
}
else{
  // ...
}

for (int i=0; i<e; ++i){
  // ...
}

...
Run Code Online (Sandbox Code Playgroud)

注意:除了味道问题,我问这个是因为我在代码库中看到了这两种样式,并试图获得一些首选的参数.

Ski*_*izz 24

很多人都非常痴迷于在哪里放置空格,大括号,括号,括号,分号等等,同时忘记了源代码最重要的一点是它需要被另一个人理解存在.

编译器不关心格式化.

在编程专业工作多年后,我开始使用这个简单的规则:

是否易于阅读和理解代码正在做什么?

如何格式化代码并不重要,如果不满足上述条件,则代码质量很差.

我个人喜欢格式化,我不会说它是什么,因为它真的无关紧要.

我发现不同的程序员代码有不同的风格很有用.

当然还有一个例外:文档和教程的例子应该始终是一致的 - 你需要得到读者跟随正在显示的重要元素,而不是得到由格式化牵制.


Mat*_*son 18

由于这可能与习惯和品味有很大关系,因此可能很难得到任何具体的论据或反对,但这就是我的想法:

两者都相当不错,但在函数调用中看起来有多少空格?像这样:

len = strlen (somePtr);
Run Code Online (Sandbox Code Playgroud)

在我看来,至少有一个空间太多了.

在该示例中使用空格使得事物看起来更像是控制语句而不是函数调用,并且我认为使if/else/while/for有点脱颖而出是有用的.

但我意识到这是一个非常主观的观点.:)

  • +1 - 感谢有关实际问题的论据 (4认同)

Mar*_* Ba 15

我最近修改了一些代码,其中单行if修改了,有人忘了添加一些大括号.

在阅读代码时,在我看来,风格...condition){比风格更难阅读,...condition) {因为当用空格分隔时,关闭)和打开{更容易看到.(在VS2005上使用Courier New时 - 我猜可能会有不同的字体.)

我还认为,if(如果没有任何添加的空格,分离是非常清楚的,特别是因为在现代编辑器中,if很可能会有不同的颜色(,但{可能会有相同的颜色.

这是一个简短的例子:

if (pPointer && pPointer->condition(foobar)){
  SendEvent(success_foobar);
  Log(success_foobar);
}
if (pPointer && pPointer->condition(foo))
  SendEvent(success_foo);
  Log(success_foo);
if (pPointer && pPointer->condition(bar)){
  SendEvent(success_bar);
  Log(success_bar);
}
Run Code Online (Sandbox Code Playgroud)

与此相比(我认为缺少的支撑更清晰):

if(pPointer && pPointer->condition(foobar)) {
  SendEvent(success_foobar);
  Log(success_foobar);
}
if(pPointer && pPointer->condition(foo))
  SendEvent(success_foo);
  Log(success_foo);
if(pPointer && pPointer->condition(bar)) {
  SendEvent(success_bar);
  Log(success_bar);
}
Run Code Online (Sandbox Code Playgroud)

概括起来,可以认为,在现代编辑的视觉差异是非常大的今天,如if(,因此这些不需要的空间,而({通常的彩色相同,并不像视觉上不同,因此空间可订购.

  • 嗨@Thom - wrt。“如果”和开头括号之间的空格,我没有任何有意义的偏好。不确定对这些事情有*任何*行业共识。 (2认同)

rub*_*nvb 5

我个人更喜欢这种风格:

if( condition )
    oneLiner();
else if( complicatedCondition(someVar, otherVar) )
{
    more();
    than();
    oneLiner();
}
else if( otherCondition ) // I would prefer to put this in one if with '&&' between conditions...
{
    if( nestedCondition )
        oneLiner();
}
else
{
  // ...
}

for( int i = 0; i<e; ++i )
{
  // ... even for one-liner loops which occasionally might happen
}
Run Code Online (Sandbox Code Playgroud)

为什么?

  1. 大括号是对齐的
  2. oneliner没有浪费空间if.
  3. 用括号清楚地注明循环(总是)
  4. 只有外层在括号之前或之后有空格.如果有超过三个级别的函数调用,那仍然是一团糟some( function(calling(another(function())) )
  5. 以分号和逗号分隔后的单个空格,以便轻松定位这些类型的分隔符.
  6. 嵌套if的需要围绕它们.

这当然纯粹是个人的,任何关于我的风格的评论都会被肆无忌惮地忽略;-)