在何处格式化/放置“文件”;{quot;在C中?
有人能解释一下为什么在这里:在何处格式化/放置“文件”;{quot;在C中?,c,coding-style,C,Coding Style,有人能解释一下为什么在这里: 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;
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;
}
void
st_清除(st_表*表)
{//1新行
注册st_table_条目*ptr,*next;
st_指数;
如果(表->条目的压缩){//2同一行
table->num\u条目数=0;
表->实项目=0;
回来
}
对于(i=0;inum\u bins;i++){
ptr=表格->箱子[i];
表->料仓[i]=0;
while(ptr!=0){
next=ptr->next;
免费入场(ptr);
ptr=下一个;
}
}
table->num\u条目数=0;
表->头=0;
表->尾=0;
}
在一种情况下,他们离开了同一行的{
,而在另一种情况下,他们把它放到了新行
我知道在C语言中没有像大多数其他语言那样的明确命名约定,但是
{
在一个项目中始终必须将放在新行或同一行。在C标准本身中,没有强制要求放置令牌,只要它们的顺序正确。事实上:
i
= j
++;
就语法而言,它完全可以,尽管它的格式非常难看:
i = j++;
话虽如此,你应该尽可能地坚持你的指导方针。在这种情况下,我们实际上不知道指导方针是什么
指南完全有可能规定函数和非函数的大括号位置不同。正如您所指出的,这是完全有效的,并且确实是许多常见缩进样式的一部分,例如K&R样式(Wikipedia有一些流行样式) 在这种情况下,如果没有该代码遵循的编码风格指南(有一些基本原理),很难回答为什么要这样做,但一个优点是,当且仅当有行匹配时才有一个函数定义,因此可以很容易地找到它们。(函数不嵌套在标准C中,因此
{
始终位于第一列,并且(显然)在这种编码样式约定中,{
位于第一列的任何其他构造都不存在。)
正如上面链接的维基百科文章所提到的,旧式的定义可能是该公约流行的另一个(尽管是历史性的)原因
引入函数定义的
{
不同于复合语句开头的其他大括号,因为它是必需的(函数体是复合语句不能被其他语句替换的唯一情况,int foo(void)return 5;
,例如,无效)这可能在某种程度上是不一致的(如果你认为是这样),在不同的情况下放置其他的括号。这完全是风格化的。“T.C.,我知道。但是必须有一致性。”在一个项目中,无论是在新行上还是在同一行上。--不,它不关心。编译器不关心。人类可能关心,但显然他们不关心。@JeffreyBosboom,没有人说编译器关心。“总是”听起来像是一个要求。这是-函数括号在新行上,其他在同一行上。