到目前为止,我知道两种风格:
/* 1st style */
int foo(int a) {
return a;
}
/* 2nd style */
int foo(a)
int a;
{
return a;
}
(我看到有人在第二种风格中编写代码。我最初感到很惊讶但第二种风格有效(在我测试的gcc下)。这让我好奇,我想问这个问题。)
答案 0 :(得分:11)
我不会称这些样式,而是语言变体(或方言)。
编码样式是一组可能不遵循的可选约定。例如,某些编码样式请求宏名称都是大写字母(但如果不遵循该规则,则代码将编译)。
你的“2 nd 风格”被称为 Kernighan& Ritchie C 。它是20世纪70年代后期定义的旧C(在Kernighan和Ritchie的着作“ C ”的第一版中;随后的版本符合后来的C标准)。这是一种过时的语言。
目前的编制者通常遵循C99 ISO标准(1999年出版),该标准已被新的C11标准(2011年出版)所取代。
GCC编译器正在接受带有-std=c99
程序参数的C99标准。我强烈建议用gcc -Wall -std=c99
编译;最近的GCC编译器(即4.6和4.7)正在接受-std=c11
IIRC的新标准 C11 。
不要在旧的Kernighan和Ritchie C方言中编码今天:它已经过时了,编译器越来越少支持。如果你谨慎,恕我直言 C99 是一个很好的标准。并利用它的一些功能(特别是在块内混合声明和语句的能力;将所有声明放在块的开头所需的较旧的 C 方言。)。
该标准已经取得了进展,特别是因为它增加了功能并且更加精确了w.r.t.当前的系统和实践(例如多核处理器)
答案 1 :(得分:2)
使用第二种风格时有(至少)两个缺点:
另外,为了更好的可读性,您可以将函数的返回类型放在自己的行中(对于unsigned long int
和标题等冗长的返回类型尤其有用:
int
foo(int a)
{
return a;
}
答案 2 :(得分:0)
第二个是K& R C风格的语法,但它现在已经过时了。结帐@Basile Starynkevitch的回答。
答案 3 :(得分:0)
第二种样式是旧样式,支持向后兼容。我不知道我头顶的任何其他风格,但你应该使用第一个(更新)风格。当我开始使用C(1994)时,第二种(较旧的)风格已被弃用。