关于现有代码的样式问题(C/C++)

Ori*_*ski 7 c c++ coding-style

我只希望以下似乎你不喜欢多余的jabber :)
无论如何,有这样的:

for (p = fmt; *p; p++) {
    if (*p != '%') {
        putchar(*p);
        continue;
    }
    switch (*++p) {
        /* Some cases here */
        ...
    }
 }
Run Code Online (Sandbox Code Playgroud)

我想知道为什么作家(Kernighan/Ritchie)continueif声明中使用了它.
我认为这仅仅是因为他认为它比switchelse声明中缩进整体更优雅,你怎么看?

Ori*_*ach 15

大概.人类大脑的堆栈空间有限,因此难以处理深层嵌套结构.任何使我们希望解析的信息变得扁平化的东西都会使它更容易理解.

同样,我通常更喜欢这个:

bool foo(int arg)
{
    if(!arg) {
        /* arg can't be 0 */
        return false; 
    }

    /* Do some work */
    return true;
 }
Run Code Online (Sandbox Code Playgroud)

对此:

 bool foo(int arg) 
 { 
     if(!arg) {
         /* arg can't be 0 */ 
         return false; 
     } else {
         /* Do some work */ 
         return true;
     } 
 }
Run Code Online (Sandbox Code Playgroud)

或者更糟糕的是,对此:

bool foo(int arg) 
{ 
    if(arg) {
        /* Do some work */ 
        return true;
    } else {
        /* arg can't be 0 */ 
        return false; 
    } 
}
Run Code Online (Sandbox Code Playgroud)

在最后一个例子中,完成工作的部分可能很长.当读者达到else条款时,他可能不记得他是如何到达那里的.

将保释条件设置为接近开头有助于确保试图调用您的函数的人将很好地了解函数所期望的输入.

此外,正如其他人所指出的那样,继续清楚地说明没有必要进一步阅读循环内部的代码来确定在这种情况下是否在该点之后完成了更多的处理,使代码更容易理解.同样,你强迫读者跟踪的事情越少越好.


Fio*_*onn 9

因为继续,很明显代码是为这个循环迭代完成的.如果使用了else,你还要检查else之后是否没有代码.

我认为尽快退出上下文通常是一个好习惯,因为这会导致更清晰的代码.


例如:

if(arg1 == NULL)
  return;

if(arg2 == NULL)
  return;

//Do some stuff
Run Code Online (Sandbox Code Playgroud)

if(arg1 != null)
{
  if(arg2 != null)
  {
    //Do some stuff
  }
}
Run Code Online (Sandbox Code Playgroud)