如果有的话,通过格式化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);
Run Code Online (Sandbox Code Playgroud)
与更典型的东西相比
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);
Run Code Online (Sandbox Code Playgroud)
我只是发现顶级版本难以阅读并且使得缩进级别对于长块之外的语句是正确的,特别是对于包含多个嵌套块的longs块.
我能看到的唯一优势就是不同,并在您编写的代码上留下指纹.
我注意到vim格式化必须手工处理以处理顶级案例.
你看到的缩进是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 }
Run Code Online (Sandbox Code Playgroud)
回到我第一次读这本书的时候(在90年代),我发现"开始结束块边界"的论点是令人信服的,尽管当我把它付诸实践时(在Pascal中)我并不喜欢它.我在C中更喜欢它,并且发现它令人困惑.我最终使用Steve McConnel所谓的"模拟纯粹块"(Sun的Java风格,几乎是K&R).
XXXXXXXXXXXXXX X if (test) {
XXXXXX one_thing();
XXXXXX another_thing();
X }
Run Code Online (Sandbox Code Playgroud)
这是用于在Java中编程的最常见的样式(这是我整天都在做的事情).它也与我以前的语言最相似,它是一种"纯粹的块"语言,不需要"仿效".没有单个语句体,块是控制结构语法中固有的.
IF test THEN
oneThing;
anotherThing
END
Run Code Online (Sandbox Code Playgroud)
它看起来很标准.我所做的唯一个人改变是将花括号与前一行的开头对齐,而不是下一行的开头,但这只是个人选择.
无论如何,你正在看的格式化风格是C和C++的标准格式,并且被使用是因为它使代码更容易阅读,特别是通过查看缩进级别,你可以告诉你在哪里嵌套循环,条件等.例如:
if (x == 0)
{
if (y == 2)
{
if (z == 3)
{
do_something (x);
}
}
}
Run Code Online (Sandbox Code Playgroud)
好的,在这个例子中很容易看出发生了什么,但如果你在if语句中加入了很多代码,有时很难说没有一致的缩进就知道你在哪里.
在你的例子中,看一下exit(1)语句的位置 - 如果它没有像那样缩进,那么就很难分辨出这是什么.事实上,你可以告诉它在那个大的if语句的末尾.