Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这种奇怪的C代码格式是什么?_C_Formatting - Fatal编程技术网

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

这种奇怪的C代码格式是什么?,c,formatting,C,Formatting,将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

将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语句的末尾。

最上面的例子就是“WhiteMiths风格”。解释几种样式及其优缺点。

您看到的缩进是。它在第一版代码Complete中被描述为“开始-结束块边界”。这种风格的基本论点是,在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所说的“模拟纯块”(几乎是)

这是用Java编程时最常用的风格(我整天都在这样做)。它也与我的语言最为相似,它是一种“纯块”语言,不需要“模拟”。没有单个语句体,块是控件结构语法中固有的

IF test THEN
   oneThing;
   anotherThing
END
WhiteMiths样式的“优点”(在您的示例中称为顶部样式)是它反映了代码的实际逻辑结构:

  • 如果存在逻辑依赖项,则缩进
  • 将相应的括号放在同一列上,以便于查找
  • 打开和关闭上下文(可能打开/关闭堆栈帧等)是可见的,而不是隐藏的
因此,减少了if/else错误、循环出错和错误级别的捕获,以及总体逻辑一致性


但正如benefactual所写:在一定的理性限度内,格式是个人偏好的问题

我自己更喜欢Allman或GNU,因为我总是很难阅读其他类型的函数(){layout.我看到了GNU风格的价值,特别是当你有足够聪明的语法高亮显示来计算大括号时。用2x2缩进来敲打80列的“螺母”也很容易。但我个人更喜欢K&R,80列的螺母告诉我什么时候需要重构。我希望它这么简单。问题是竞争标准。有些人,但不是所有人,更喜欢前者(或者更确切地说,本对前者的描述)。其他人更喜欢后者。双方都对此抱有宗教信仰。
IF test THEN
   oneThing;
   anotherThing
END