1

我最近发现我的一位程序员同事写了如下内容:

int foo()
{
    //some code
    {
        //some code
    }
    //some code
    {
        //some code
    }
    //some code
}

如您所见,内部的两对花括号仅用于在逻辑上分隔两个代码块。虽然我写 C 有一段时间了,但我从未真正见过这种风格。这在 C 语言中被认为是一种好的风格,或者至少是一种可接受的风格吗?

4

6 回答 6

9

我不认为这是一种特别好的风格——它多余地增加了缩进,为一条线留下了更少的空间,同时它降低了可读性。如果您有多个“逻辑模块”,则可以使用空行将它们分开,例如

/* declarations */
char *str;
size_t size;

/* allocate memory */
size = 16;
str = malloc(size);
if (str == NULL) {
    return -1;
}

/* do actual task */

等等。或者,如果你有大量代码,你应该考虑重构它并将它们分解成单独的函数。

于 2012-11-13T06:25:53.183 回答
2

一般来说,不,这不是好的风格。此外,在内部范围内声明变量将(不应该)导致更有效的堆栈使用:任何体面的编译器都会优化它。自从允许在任何地方声明变量的 C++ 在 90 年代初开始流行以来,他们就能够做到这一点。

然而,在内部范围内声明变量将减少其他范围的“命名空间污染”。根据经验,变量最好只在使用它的范围内可见。

因此,在我看来,在一些例外情况下,大括号会被认为是好的风格。最明显的例子是 C90 中的 switch 语句:

switch(x)
{
  case 1:
  {
    /* now you can declare local variables here */
    int my_local;

    break;
  }

  case 2:
  {
    int some_other_local_only_related_to_case_2;

    break;
  }
}
于 2012-11-13T08:47:49.913 回答
2

这通常是为了限制变量的范围,并且可以使您的程序使用更少的内存。

编辑:正如@DCoder 指出的那样,您的编译器现在很可能使这变得不必要了,也许您的朋友正在使用他很久以前就需要它时学到的技术。

于 2012-11-13T06:24:48.410 回答
2

大括号引入了一个嵌套作用域,例如,您可以在其中再次使用相同的变量名,我从来没有真正需要它,我认为它显示出糟糕的编码并使阅读代码的人感到困惑。

int foo()
{
    int a;
    //some code
    {
        int a;
    }
}
于 2012-11-13T06:26:34.787 回答
1

如果您放入 {} 的代码可以独立存在,则可能值得将该代码放入一个函数中,即使它是一个 void 函数。这样,该函数中使用的变量的命名空间就受到了限制,并且您将代码分割成更易于管理的部分。我一直这样做是为了组织我的代码并保持其可读性/易于维护。

于 2012-11-13T08:55:14.833 回答
1

如果您将这些大括号的数量保持在较低水平,那没关系,我已经做到了。

但是,现在我想说将代码分解成更小的函数,并带有名称/描述。这是一个更好的方法。

于 2012-11-13T06:41:54.860 回答