按如下方式格式化 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 格式必须手动滚动才能处理最上面的情况。

有帮助吗?

解决方案

通过遵循一些格式和注释标准,首先您向其他将阅读和编辑您编写的代码的人表示尊重。如果您不接受规则并编写深奥的代码,最可能的结果是您将无法与其他人(程序员)有效地沟通。如果软件仅由您编写并为您编写并且没有人会阅读它,则代码格式是个人选择,但有多少现代软件仅由一个人编写?

其他提示

最上面的例子被称为“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 风格, ,这几乎是 凯瑞).

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

这是 Java 编程中最常见的风格(这就是我整天所做的事情)。也和我最相似 以前的语言 这是一种“纯块”语言,不需要“模拟”。没有单语句体,块是控制结构语法中固有的。

IF test THEN
   oneThing;
   anotherThing
END

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

无论如何,您正在查看的格式样式是 C 和 C++ 的标准格式,之所以使用它是因为它使代码更易于阅读,特别是通过查看缩进级别,您可以知道您所在的位置嵌套循环、条件语句等例如。:

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

好的,在该示例中,很容易看出发生了什么,但如果您在这些 if 语句中放入大量代码,有时很难在没有一致缩进的情况下判断您所​​在的位置。

在您的示例中,查看 exit(1) 语句的位置 - 如果它不是这样缩进,则很难判断它在哪里。事实上,您可以看出它位于那个大 if 语句的末尾。

我会想到个人偏好吗?我猜它的代码块在一条垂直线上,这样可能更容易一目了然?就我个人而言,我更喜欢将大括号直接从上一行开始

代码格式是个人喜好。只要容易阅读,维护费用就够了!

这只是另一种风格——人们按照自己喜欢的方式编码,这是一种可接受的风格(尽管不是我的首选)。我认为与更常见的样式相比,它没有太大的缺点或优点,在这种样式中,括号不缩进,但其中的代码缩进。也许有人可以通过说它更清楚地界定代码块来证明这一点。

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

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

因此,我认为这种格式没有什么根本性的错误——在一定的合理限度内,格式是个人喜好的问题。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top