【问题标题】:Where to format/place the "{" in C? [closed]在哪里格式化/放置 C 中的“{”? [关闭]
【发布时间】:2014-10-05 04:53:15
【问题描述】:

谁能解释一下为什么在这里:

void
st_clear(st_table *table)
{ //1 a new line
    register st_table_entry *ptr, *next;
    st_index_t i;

    if (table->entries_packed) { //2 the same line
        table->num_entries = 0;
        table->real_entries = 0;
        return;
    }

    for (i = 0; i < table->num_bins; i++) {
      ptr = table->bins[i];
      table->bins[i] = 0;
      while (ptr != 0) {
        next = ptr->next;
        st_free_entry(ptr);
        ptr = next;
      }
    }
    table->num_entries = 0;
    table->head = 0;
    table->tail = 0;
}

在一种情况下,他们将{ 留在了同一行,而在另一种情况下则放到了新行?

https://github.com/ruby/ruby/blob/1b5acebef2d447a3dbed6cf5e146fda74b81f10d/st.c

我知道在 C 中没有像大多数其他语言那样明确的命名约定,但在一个项目中总是必须将{ 放在新行中either或留在同一行。

【问题讨论】:

  • 这完全是文体。
  • @T.C.,我知道。但必须有一致性。
  • "在一个项目中总是必须在新行或留在同一行"——不,它没有。编译器不在乎。人类可能会,但显然他们不会。
  • @JeffreyBosboom,没有人说过编译器在乎。
  • “总是”听起来像是一个要求。这是a pretty common bracing style - 函数大括号在新行上,其他在同一行上。

标签: c coding-style


【解决方案1】:

C 标准本身并没有要求放置令牌,只要它们的顺序正确。事实上:

i

     = j

++;

完全没问题,语法明智,尽管它的格式非常丑陋:

i = j++;

话虽如此,您应该尽可能地遵守您的准则。在这种情况下,我们实际上并不知道指南是什么

指南完全有可能说明函数和非函数的大括号位置不同。

【讨论】:

    【解决方案2】:

    正如您所指出的,这是完全有效的,并且确实是许多常见缩进样式的一部分,例如K&R 风格(*有一些流行风格的summary)。

    为什么在这种情况下这样做,如果不遵循此代码的编码风格指南(有一些理由),很难回答,但优点是,当且仅当有一行时,才有一个函数定义匹配^[{],所以很容易找到。 (函数不会嵌套在标准 C 中,因此 { 始终位于第一列,并且(显然)没有任何其他构造在此编码样式约定中 { 位于第一列。)

    正如上面链接的 Wikipedia 文章中所述,旧式定义可能是该约定流行的另一个(尽管具有历史意义的)原因。

    引入函数定义的{与复合语句开头的其他大括号不同,因为它是必需的(复合语句不能被其他语句替换的唯一情况是函数体,@987654326例如,@ 无效)。这可能在某种程度上合理地说明了在不同情况下放置其他大括号的不一致(如果您这么认为的话)。

    【讨论】: