这种奇怪的C代码格式是什么?

时间:2020-03-05 18:55:32  来源:igfitidea点击:

格式化C代码可提供以下优势(如果有):

while(lock_file(lockdir)==0)
    {
    count++;
    if(count==20)
        {
        fprintf(stderr,"Can't lock dir %s\n",lockdir);
        exit(1);
        }
    sleep(3);
    }
if(rmdir(serverdir)!=0)
    {
    switch(errno)
        {
        case EEXIST:
            fprintf(stderr,"Server dir %s not empty\n",serverdir);
            break;
        default:
            fprintf(stderr,"Can't delete dir %s\n",serverdir);
        }
    exit(1);
    }
unlock_file(lockdir);

与更典型的东西

while(lock_file(lockdir)==0) {
    count++;
    if(count==20) {
        fprintf(stderr,"Can't lock dir %s\n",lockdir);
        exit(1);
    }
    sleep(3);
}
if(rmdir(serverdir)!=0) {
    switch(errno) {
        case EEXIST:
            fprintf(stderr,"Server dir %s not empty\n",serverdir);
            break;
        default:
            fprintf(stderr,"Can't delete dir %s\n",serverdir);
    }
    exit(1);
}
unlock_file(lockdir);

我只是觉得顶级版本很难阅读,而且对于长块之外的语句,尤其是包含多个嵌套块的长块,很难使缩进级别正确。

我能看到的唯一优点就是与众不同,将指纹留在编写的代码上。

我注意到vim格式必须手动滚动才能处理大写字母。

解决方案

回答

没有。缩进和其他编码标准是优先考虑的问题。

回答

个人偏好我会想到吗?我猜它在一条垂直线上有代码块,因此一目了然可能更容易解决吗?我个人比较喜欢将括号直接从上一行开始

回答

它只是另一种样式-人们以自己喜欢的方式进行编码,这是一种公认​​的样式(尽管不是我的首选)。与没有缩进括号而在其中包含代码的更常见的样式相比,我认为它没有任何缺点或者优势。也许可以通过说它更清楚地界定代码块来证明这一点。

回答

代码格式化是个人喜好。只要通俗易懂,就需要付费维护!

回答

为了使这种格式具有"优势",我们确实需要另一种格式的等效C代码进行比较!

在我工作的地方,使用这种缩进方案是为了促进自家的折叠编辑器机制。

因此,我认为在一定的合理范围内,这种格式从根本上没有错,格式设置是个人喜好问题。

回答

通过遵循一些格式和注释标准,首先,我们对将要阅读和编辑我们编写的代码的其他人表示尊重。如果我们不接受规则并以某种方式编写深奥的代码,则最可能的结果是我们将无法与其他人(程序员)进行有效的交流。如果仅由我们自己为我们编写软件,并且我们是为我们自己编写的,并且没有人希望阅读,那么代码格式是个人选择,但是仅一个人编写了多少现代软件?

回答

在我看来,这很标准。我唯一要进行的个人更改是将花括号与上一行的开头对齐,而不是与下一行的开头对齐,但这只是个人选择。

无论如何,我们正在使用的格式化格式是针对C和C ++的一种标准格式,之所以使用该格式,是因为它使代码更易于阅读,尤其是通过查看缩进级别,我们可以知道我们所处的位置嵌套循环,条件等。例如:

if (x == 0) 
{
  if (y == 2)
  {
    if (z == 3)
    {
       do_something (x);
    }
  }
}

在该示例中可以很容易地看到正在发生的事情,但是如果在这些if语句中放入很多代码,有时很难确定没有一致的缩进的位置。

在示例中,请查看exit(1)语句的位置-如果未将其缩进,那么很难知道它在哪里。实际上,我们可以知道它位于该大if语句的末尾。

回答

最著名的例子是"怀特史密斯风格"。维基百科关于缩进样式的条目解释了几种样式以及它们的优缺点。

回答

我们看到的缩进是Whitesmiths风格。在《代码完成》的第一版中将其描述为"起始块边界"。这种风格的基本论点是,在诸如C(和Pascal)之类的语言中," if"控制单个语句或者块。因此,通过一致地缩进,应该显示整个块,而不仅仅是其内容从属于if语句。

XXXXXXXXXXXXXXX       if (test)
   XXXXXXXXXXXX           one_thing();

XXXXXXXXXXXXXXX       if (test)
   X                     {
   XXXXX                 one_thing();
   XXXXX                 another_thing();
   X                     }

回到90年代初读这本书时,我发现"开始块边界"的论点令人信服,尽管当我将它付诸实践时(在Pascal中)我并不喜欢它。在C语言中,我什至不喜欢它,并且使它难以阅读。我最后使用了史蒂夫·麦康奈尔(Steve McConnel)所说的"仿真纯块"(Sun的Java风格,几乎是K&R)。

XXXXXXXXXXXXXX X      if (test) {
   XXXXXX                one_thing();
   XXXXXX                another_thing();
X                     }

这是用于Java编程的最常见的样式(这是我整天要做的事情)。它也最类似于我以前的语言,即"纯块"语言,不需要"仿真"。没有单语句主体,块是控制结构语法中固有的。

IF test THEN
   oneThing;
   anotherThing
END