当前位置:  开发笔记 > 开发工具 > 正文

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

如何解决《这种奇怪的C代码格式是什么?》经验,为你挑选了4个好方法。

如果有的话,通过格式化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);

我只是发现顶级版本难以阅读并且使得缩进级别对于长块之外的语句是正确的,特别是对于包含多个嵌套块的longs块.

我能看到的唯一优势就是不同,并在您编写的代码上留下指纹.

我注意到vim格式化必须手工处理以处理顶级案例.



1> brian d foy..:

最好的例子是"Whitesmiths style".维基百科对Indent Styles的介绍解释了几种风格及其优缺点.



2> bendin..:

你看到的缩进是Whitesmiths风格.它在Code Complete的第一版中被描述为"begin-end Block Boundaries".这种风格的基本论点是,在像C(和Pascal)这样的语言中,它if管理单个语句或块.因此,整个块,而不仅仅是其内容应该if通过一致地缩进来显示从属于-statement.

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



3> cruizer..:

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



4> Ben..:

它看起来很标准.我所做的唯一个人改变是将花括号与前一行的开头对齐,而不是下一行的开头,但这只是个人选择.

无论如何,你正在看的格式化风格是C和C++的标准格式,并且被使用是因为它使代码更容易阅读,特别是通过查看缩进级别,你可以告诉你在哪里嵌套循环,条件等.例如:

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

好的,在这个例子中很容易看出发生了什么,但如果你在if语句中加入了很多代码,有时很难说没有一致的缩进就知道你在哪里.

在你的例子中,看一下exit(1)语句的位置 - 如果它没有像那样缩进,那么就很难分辨出这是什么.事实上,你可以告诉它在那个大的if语句的末尾.

推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有