1.复合语句的对齐和缩进样式
(1). K&R风格,共同完成C语言《白皮书》C时使用的风格。由于这本书被当时的C程序员誉为C语言圣经,因此这种风格也被效仿。 左大括号出现在该行的末尾。 通过缩进保持代码紧凑的缺点是不容易找到左大括号:
if (line_num == MAX_LINES) {
line_num = 0;
page_num++;
}
(2)。 样式,以 Eric(以及其他一些 UNIX 工具的作者)命名,每个大括号占单独的一行。 易于检查支架匹配:
if (line_num == MAX_LINES)
{
line_num = 0;
page_num++;
}
(3)。 由 C 编译器推广的样式规定花括号应该缩进。 C++同学看STL代码有没有感觉很眼熟?
if (line_num == MAX_LINES)
{
line_num = 0;
page_num++;
}
(4)。 GUN风格,用于GUN项目开发的软件中,对大括号使用缩进,然后进一步缩进内部语句。 喜欢Linux系统的同学在看一些工具的源码时应该注意到:
if (line_num == MAX_LINES)
{
line_num = 0;
page_num++;
}
这四种不同的编码风格中,国内最常用的无疑是K&R和R。以前C语言流行的时候,很多东西都是第一位的。 当更多的Java、C#、C++语言流行的时候,现在是第二。 这两种风格的也比较多。 当然,Java中也有很多K&R风格。 如果是平台由于VS的关系,默认第二个缩进关系会比较风格。
2.变量的命名风格和习惯
一般C语言程序员在命名宏定义时全部使用大写字母,并使用下划线“_”来连接多个单词。
变量的命名大致分为两种风格:
(1) 驼峰命名法
当多个单词串联成变量名时,后续单词中每个单词的首字母都以大小写区分,例如:
lineNum
(2)下划线命名法
单词之间使用下划线分隔,例如:
line_num
由于Java、C#和C++等一些语言的出现,驼峰命名法变得流行起来。 下划线命名法是早期C语言中经常使用的一种方法。 还有很多老C语言程序员喜欢下划线,也许他们觉得这样看起来更漂亮。 ,至于等命名方式我就不提了。
3.注释风格
在C语言中,C89中只有/**/注释。 在C99中,//注释方法是从C++等一些语言借来的。
这两种注释实际上都有各自的优点和缺点。
(1). /**/评论
在注释大量代码时非常方便,甚至可以注释出很多技巧,例如翼型注释。
/*此方法为翼型注释*/
/*******************************
* 盒型注释 *
******************************/
/*
* 盒型注释的简化版
*/
(2)。 //评论
在单行注释时特别方便,并且与/*/注释嵌套注释也弥补了/*/注释不能嵌套的缺点。 主要问题是 // 注释只会影响单行,而不是因为注释。 使用不当可能会导致许多行被注释掉。 当然,随着IDE功能强大的今天,大注释有了方便的快捷键,一些注释的不便已经消失了。
4、C语言函数无参数时是void还是()?
我经常看到一些C语言代码。 当函数没有参数时,常留空,写成()。 不过这种写法对于C语言来说其实是可以接受任何参数的! 您可能想知道为什么要这样设计。 这也和C语言设计的初衷有关。 与其他语言中规范完全不符的事情在C中是允许的。因为C是一种允许计算结果实现定义的语言。 也就是说,在特定平台上编译、链接和执行允许得到不同的结果! 更大的自由度可能会带来更多的陷阱和出错的可能性。
所以我个人认为避免这些陷阱的最好办法就是保持良性的C程序编码习惯和风格。 例如,当确定不需要参数时,使用void而不是()。 这样,什么都不写,不带任何参数告诉它。 我不需要编译器的参数,所以不要乱搞编译器!
当然,这种情况在C++中已经不存在了。 不管你写不写,C++都是无效的!
5、这种复合语句如何对齐? 否则如果嵌套呢?
(1)关于if else嵌套问题,简单来说就是需要的时候添加。 当然,我个人有时候在只有一行的情况下,为了保持代码简洁,是不会加花括号的,所以别人加代码的时候我需要谨慎!
if (i > 0 && i < 10)
if (i > 5)
printf("YES");
else
printf("i greater than 10!\n");
为了让代码看起来简洁明了,我们可能会写这样的代码。 好吧,你可能和我一样是一个有轻微强迫症的程序员,编码风格一定是“最好的”。 即使每一项都改,也一定要符合自己的风格。 但是当i=2时,上面的代码会输出最终的i大于10吗? ,答案是否定的,C语言中的else有一个规则,该子句应该属于与其最接近的if。 所以上面代码的实际缩进是:
if (i > 0 && i < 10)
if (i > 5)
printf("YES");
else
printf("i greater than 10!\n");
意义完全不同!
(2)swith的代码对齐方式
将语句放在分支标签之后:
switch (value) {
case 1: printf("branch 1!");
break;
case 2 : printf("branch 2!");
break;
default:
}
如果每个分支只有一个简单的操作,则break语句甚至可以与该操作放在同一行
switch (value) {
case 1: printf("branch 1!"); break;
case 2 : printf("branch 2!"); break;
default:
}
另一种选择是将语句放在分支标签下方并缩进语句以突出显示分支标签:
switch (value) {
case 1:
printf("branch 1!");
break;
case 2 :
printf("branch 2!");
break;
default:
}
当每个分支语句都比较短时,第一种方法显然是更好的选择。 第二种方法更适合每个分支都很大的分支语句。 当然,此时别忘了加上花括号。 否则编译器会提示你!
总结:在实际项目中,如果你是项目技术的决策者,你可以根据自己的喜好和规范来制定规则,并让下面的人严格执行这个风格(我想笑^^),如果不是,老实说,在您的项目中使用这套,不要添加任何不必要的大惊小怪! 当然,如果你私下自己写代码,就用你喜欢的。 有些风格很难说是好是坏。 只要始终坚持一种风格!
参考:C语言编程