关于判定一位程序员是否合格(暂且把所有写程序的人都叫做程序员),我们提出了修养的概念。“修养”是要修炼的,你不妨也去武当山、峨嵋山去打坐打坐,回来也可以教教我,我很羡慕那些身手不凡的大侠的。
实际上我大可不必多说什么,因为有位“大侠”已经给了我们做了“修养”的阐释,你可以到他的博客──“陈皓专栏【空谷幽兰,心如皓月】”( http://blog.csdn.net/haoel)上找到答案。陈皓他整理出了一套《编程修养》,很是值得借鉴,这里我引用一下他的部分资料(前段时间他卷入了一场官司,因为他在博客上发的文章被人抄袭出版了。所以以免官司惹上身,我还是郑重地写上“引用”两个字):
01、版权和版本 02、缩进、空格、换行、空行、对齐
03、程序注释 04、函数的[in][out]参数
05、对系统调用的返回进行判断 06、if 语句对出错的处理
07、头文件中的#ifndef 08、在堆上分配内存
09、变量的初始化 10、h和c文件的使用
11、出错信息的处理 12、常用函数和循环语句中的被计算量
13、函数名和变量名的命名 14、函数的传值和传指针
15、修改别人程序的修养 16、把相同或近乎相同的代码形成函数和宏
17、表达式中的括号 18、函数参数中的const
19、函数的参数个数 20、函数的返回类型,不要省略
21、goto语句的使用 22、宏的使用
23、static的使用 24、函数中的代码尺寸
25、typedef的使用 26、为常量声明宏
27、不要为宏定义加分号 28、||和&&的语句执行顺序
29、尽量用for而不是while做循环 30、请sizeof类型而不是变量
31、不要忽略Warning 32、书写Debug版和Release版的程序
我想具体说说02、03、20点,因为很重要:
02.缩进、空格、换行、空行、对齐:我发现有太多的人没注意这点,因为编译器会忽略这些元素,不管这些元素存在与否,你的程序都可编译通过(如果你写的代码正确的话)。然而一旦你的程序出现逻辑错误,那就麻烦了。如果你的程序有1000行,甚至10000行,你如何找到那个致命的错误?
03.程序注释:没有注释的程序是不完善的,同样一个原因,如果你的程序很长,你又该怎么知道某一语句块的作用?你可以说自己的程序很短,不需要注释,但习惯养成了后我就不敢保证你将来写长程序时会注意到注释。
20.函数的返回类型,不要省略:很多人在写的 main 函数时没有返回类型,编译器会默认是返回 int 型的,如果不在结尾加上一句 return ,那么编译时总有个 Warning 。虽然程序照样可以编译出来,照样可以运行,但是你已经破坏了一个优美的程序代码。正如我在前言中写出的声明“我是一个人,而不是猪”一样,程序一定也要遵循规则,具有良好的声明。
其它的我就不多说了,陈皓给出了具体的答案,都在他的博客里。如果你想浏览他的博客,要注意的是,请不要拿他的文章卖钱,他最近对此很敏感……
实际上我大可不必多说什么,因为有位“大侠”已经给了我们做了“修养”的阐释,你可以到他的博客──“陈皓专栏【空谷幽兰,心如皓月】”( http://blog.csdn.net/haoel)上找到答案。陈皓他整理出了一套《编程修养》,很是值得借鉴,这里我引用一下他的部分资料(前段时间他卷入了一场官司,因为他在博客上发的文章被人抄袭出版了。所以以免官司惹上身,我还是郑重地写上“引用”两个字):
01、版权和版本 02、缩进、空格、换行、空行、对齐
03、程序注释 04、函数的[in][out]参数
05、对系统调用的返回进行判断 06、if 语句对出错的处理
07、头文件中的#ifndef 08、在堆上分配内存
09、变量的初始化 10、h和c文件的使用
11、出错信息的处理 12、常用函数和循环语句中的被计算量
13、函数名和变量名的命名 14、函数的传值和传指针
15、修改别人程序的修养 16、把相同或近乎相同的代码形成函数和宏
17、表达式中的括号 18、函数参数中的const
19、函数的参数个数 20、函数的返回类型,不要省略
21、goto语句的使用 22、宏的使用
23、static的使用 24、函数中的代码尺寸
25、typedef的使用 26、为常量声明宏
27、不要为宏定义加分号 28、||和&&的语句执行顺序
29、尽量用for而不是while做循环 30、请sizeof类型而不是变量
31、不要忽略Warning 32、书写Debug版和Release版的程序
我想具体说说02、03、20点,因为很重要:
02.缩进、空格、换行、空行、对齐:我发现有太多的人没注意这点,因为编译器会忽略这些元素,不管这些元素存在与否,你的程序都可编译通过(如果你写的代码正确的话)。然而一旦你的程序出现逻辑错误,那就麻烦了。如果你的程序有1000行,甚至10000行,你如何找到那个致命的错误?
03.程序注释:没有注释的程序是不完善的,同样一个原因,如果你的程序很长,你又该怎么知道某一语句块的作用?你可以说自己的程序很短,不需要注释,但习惯养成了后我就不敢保证你将来写长程序时会注意到注释。
20.函数的返回类型,不要省略:很多人在写的 main 函数时没有返回类型,编译器会默认是返回 int 型的,如果不在结尾加上一句 return ,那么编译时总有个 Warning 。虽然程序照样可以编译出来,照样可以运行,但是你已经破坏了一个优美的程序代码。正如我在前言中写出的声明“我是一个人,而不是猪”一样,程序一定也要遵循规则,具有良好的声明。
其它的我就不多说了,陈皓给出了具体的答案,都在他的博客里。如果你想浏览他的博客,要注意的是,请不要拿他的文章卖钱,他最近对此很敏感……