或许你会问:为什么要把命名和代码风格放在这么前面讲?我们现在连一行代码都写不出来呢!!!
因为我认为有着良好的命名规范和代码风格实在是太重要了。而这些东西在国内某些书上只字未提。以至于某些新手写出来的东西简直惨不忍睹!
所以本教程将他放到前面来讲,就是希望大家从一开始就养成一个良好的编程习惯。如果你觉得现在先学习怎么写代码,学好了后再来考虑怎么写出优秀的代码。这就大错特错了。这玩意就像你学写字一样,一旦养成了坏习惯,想改正就要花大量的精力,实在是得不偿失。
缩进
所谓缩进,是在每一行的代码左端空出一部分长度,使得更加清晰地从外观上看出程序的逻辑结构。请比较下面两个程序
#include <stdio.h> int main() { int test; if(1) { if(1) { test=1; } } return 0; }
#include <stdio.h> int main() { int test; if(1) { if(1) { test=1; } } return 0; }
显然,第一个程序更加清晰。而第二个程序,如果你写漏了一个反大括号你也很难发现。
缩进的长度
这个问题没有一个固定的标准,有的人推荐8个空格的长度,有的则是4个空格
使用8个空格的优点是缩进量大,层次更加清晰。但是缺点也是显而易见的:占用了太多空间。如果你的代码中有着多层嵌套,那么你很难在一个屏幕里把他们显示完整。
这个问题的答案在于你自己的爱好,我喜欢使用4个字符的宽度
用什么字符缩进?
这个问题和上面一样,没有一个标准答案
有的人推荐使用空格,因为空格的大小是一定的。这样无论在哪儿打开你的代码,显示出来都是在你这里看到的样子。但是为了缩进,你需要按很多次空格,特别是多层嵌套的时候,你或许会为按空格而发疯。
使用table键可以减少缩进时按键的次数。但是table键的缩进长度是可以配置的。如果你用4字符,别人用设置成8字符宽度的编辑器打开,那简直就是一坨翔。
codeblocks等IDE默认的长度是4个空格。如果你愿意可以随时修改它。
哪里需要缩进?
当然是在需要缩进的地方缩进咯!
开个玩笑。
通常,在左花括号的下一行,就要增加缩进量
有些语句,即使没有花括号(其实是花括号被省略了)也要增加缩进。(请参考上面给出的代码)
空格
c语言中使用了大量的符号,但正是因为大量符号的使用
增加了代码的“密度”,代码看起来是一坨坨的。
所以我们需要人为的添加空格,稀释代码的密度。
当然空格不能随便加,需要有一定的规范
下面是本文中使用的规范
- 运算、比较符号前后都需要加上空格,如:a + b
- 左花括号前需要加上空格
- if等关键字之后和正括号之前需要加空格如:if (a > 0)
- 分号前不需加空格,但是分号后如果有代码的则需要加空格,如for (; 1;)
- 括号后,反括号前后无需加空格,如printf(“hello”);
空行
需要空行的位置有,函数定义前、后
一组联系紧密的代码段之前和之后
比如之前文章中给出的那个测试命令的程序,这里就不贴代码了
左括号之争,换行?不换行?
这也是一个比较蛋疼的问题
当然从使代码更清晰的角度看,作为代码段开头标识的左花括号{应该另起一行,像下面这样
int main() { if (p == NULL) { printf("error!\n"); exit(0); } }
这种写法不够紧凑,还有一种写法像下面这样
int main() { if (p == NULL) { printf("error!\n"); exit(0); } }
我更喜欢前者。值得注意的是,在定义一个函数的时候,第二种写法的左花括号总是写在下一行。
注释
注释是程序里一个很重要的东西,尽管它并不会影响编译出来的程序
合理的注释将增加代码的可读性,注释的语言应该是简洁的
初学的时候可以写很多注释,但是在熟练以后,你就需要减少注释的量了,只保留那些必要的注释
注释在两个正斜杠的后面(只能在该行写注释),或者在/*和*/之间(可以在多行写注释),比如
int main() { //我是友爱的注释 /*我也是注释*/ }
c语言最初只支持/**/写法的注释,在C90标准中,//单行注释的写法被添加到了c语言中,如果你的编译器不支持C90标准,请选择使用/**/的写法
注释在编译的时候会被替换为空格
代码风格暂时就讲这么多,后面的学习中我们还会提到。
代码风格不一定要有一个硬性的要求(当然如果在公司里合作开发项目,一般是会制定一个代码风格的)。从现在开始,你应该尝试着形成一个属于你自己的代码风格。当然前提是你看着舒服,别人也看着舒服。
命名
c语言中你可以定义变量,函数,结构体等等等等,定义这些东西就需要你去给他起一个名字
名字中允许使用的字符有下划线_和26个字母还有0-9十个数字
不过数字不能作为第一个字符出现,比如abc123是合法的名字
123abc则不是
另外。你也不应该使用关键字,因为它们已经被保留了
还有,通常情况下标准库中的一些变量名会使用下划线_最为第一个字符,如_abc,为了防止重名而产生冲突,故一般情况下不要使用下划线作为名字的第一个字符
还要提醒某些新手的是,不要使用拼音命名。(有些英语不好的新手确实会这样做)
这样会降低你的代码可读性。好的名字应该是“见名知意”,并且“言简意赅”
具体一些需要注意的事项,我们在相应的位置会有较详细的讲解。