鉴于以下两种编码风格,请在编写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有点脱颖而出是有用的.
但我意识到这是一个非常主观的观点.:)
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和(,因此这些不需要的空间,而(与{通常的彩色相同,并不像视觉上不同,因此空间可订购.
我个人更喜欢这种风格:
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)
为什么?
if.some( function(calling(another(function())) )if的需要围绕它们.这当然纯粹是个人的,任何关于我的风格的评论都会被肆无忌惮地忽略;-)