这种奇怪的C代码格式是什么?
将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
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样式的“优点”(在您的示例中称为顶部样式)是它反映了代码的实际逻辑结构:
- 如果存在逻辑依赖项,则缩进
- 将相应的括号放在同一列上,以便于查找
- 打开和关闭上下文(可能打开/关闭堆栈帧等)是可见的,而不是隐藏的
但正如benefactual所写:在一定的理性限度内,格式是个人偏好的问题 我自己更喜欢Allman或GNU,因为我总是很难阅读其他类型的函数(){layout.我看到了GNU风格的价值,特别是当你有足够聪明的语法高亮显示来计算大括号时。用2x2缩进来敲打80列的“螺母”也很容易。但我个人更喜欢K&R,80列的螺母告诉我什么时候需要重构。我希望它这么简单。问题是竞争标准。有些人,但不是所有人,更喜欢前者(或者更确切地说,本对前者的描述)。其他人更喜欢后者。双方都对此抱有宗教信仰。
IF test THEN
oneThing;
anotherThing
END