|
|
1.文件结构: /* Copyright (c) 2002 北京UBI公司 * All rights reserved * * 文件名称:lud.c * 摘 要:处理字符串 * 版 本:2.1 *作 者:ludejun *完成日期:2002/01/01 * *取代版本:2.0 *原 作:lud98 *原作日期:2001/11/11 */
头文件分目录存放
#ifndef GRAPHICS_H #define GRAPHICS_H
#include<math.h> #include"ludheader.h"
void Function() {
}
class Box() { }
#endif
2程序的版式: A.空行: 声明之后,函数定义结束以后。 同一个函数体,逻辑关系不紧密的行之间。 B.代码行: 同一行代码只作一件事情。 If for while do 自占一行,而且不管有多少语句,都加上{} 关键字之后留空格: 函数名之后不要留空格。 "("向后紧跟;","")"";"向前紧跟,且紧跟出不留空格。 ","之后留空格。 二元操作符的前后都需要有空格。 一元操作符前后不要空格如:~ ! ++ -- 等。 [ ] . -> 三个复后前后不加空格。 C.对齐 {} 应该自占一行,而且位于同一列。并且和引用他们的语句左对齐。 { 后面的代码块在其右边数格处左对齐。
D.长行拆分: 最大的长度应在70~80个字符之间。 特别长的行:拆分缩进,把运算符放在前边。 E.修饰符: * 和 & 应靠近变量名称。 int *x, y;
F.注释: 注释不可选宾夺主。 代码清晰的时候,不加注释。 写代码,写注释;改代码,改注释。 注释应准确,易懂。不能写缩写。 位置:在被注释代码的上方和右方。 多重(欠套)循环,在段落的结束处加注释。
G.类的版式: Private 类型的数据写在前边。 Public 函数在前,Private 函数在后。 3命名规则: Microsoft 公司的"匈牙利"法:在变量,函数名中加入便于理解的前缀。 Int ia, ib, ix; Float fa, fb, fd;
采用英文组合。 Windows采用大小写混排。 Unix类的系统采用小写加下划线。 不要有仅仅是大小写不用的变量。 不要有名称完全一样的全局变量和局部变量。 变量名称尽量用名次或者形容词加名词。 全局函数名称尽量用动词或者动词加名词。 禁!避免出现数字编号。 Windows程序的命名规则 类名,函数名用大写字母开头的单词组合而成。 变量,参数用小写字母开头的单词组合而成。 常量全用大写字母,用下划线分隔。 静态变量前缀加s_ 尽少使用全局变量。如果需要,以g_ 开头。 类的数据成员前面加m_ 区别于数据函数的参数。 加上反映软件性质的前缀。如prd Unix 应用程序的命名规则。 4表达式和基本语句。 A.加上括号以使运算的优先级鲜明。 B.复合表达式注意: a.别台复杂。 b.禁止有多个用途(隐含用途。) C.If语句 布尔与零值比较: if(flag) 或者 if(!flag) 整型和零值比较: if (vlaue==1) 或者 if (value!=1) 指针与零值比较: if (p==NULL) 或者 if (p != NULL) 实型和零值比较: const float EPSINON = 0.000001 if ( (x >= EPSINON) || ( x <= EPSINON)  D.循环的效率 尽可能把最长的循环放到程序的最里层。 E.循环变量采用半开半闭的方法: for (I = 0 ; I < N ; I++) F.Switch 语句 别忘了break; 别忘了 default :break; 5常量 A.好处: a.可读性; b.避免多处来回书写的时候书写错误 c.改动容易。 B.Const和#define的比较。 Const有类型、可调试。完全取代Define常量。 C.常量定义规则: a.需要公开的常量,放在头文件里;不需要公开的,放在定义文件的头。可以把不同模块的常量放到同一个文件中一边集成管理。 b.如果常量之间密切相关。应该在定义的时候来定义出来,而不应该分头去写。如 const float DIAMETER = RADIUS * 2 D.类中的常量; 整个类中都恒定的常量可以用枚举型的变量来定义; class A { enum { SIZEMAX = 100, SIZEMIN = 200} int Array[SIZEMIN]; }; 但是有个弊端就是不能表示浮点数。 6函数设计 A.参数的规则: a.书写要完整。不能只写类型不写参数名称。 b.对没有参数的函数,用void补充 c.参数命名要恰当,顺序要合理。 Void StrCopy(char *strSource , char *strDestination) d.函数的参数个数需要控制,尽可能不大于5 e.禁止使用类型和数目不确定的函数参数。。 B.返回值的规则。 a.任何函数都需要有返回值。如果没有,则用void代替。 b.函数名字和返回值类型不要冲突。 c.当返回值是对象的时候,引用传递往往比值传递效率高。 C.函数内部实现的规则。 A.在入口处对参数的有效性进行检查。 B.在出口处对return值得有效性进行检查。 C.不要将return int(x + y) 写成:int temp = x + y; return temp; D.构造建议: a.功能单一,不要编制多种能的函数。 b.函数体的规模要小,尽量小于50行代码。 c.避免记忆功能,相同的输入相同的输出。即行为可预测性。 d.不仅仅要检查参数的有效性,其他途径进入函数体的文件句柄,全局变量等也要校验。 e.用于出错处理的返回值一定要清楚。让读者不容易忽视、误解错误信息。
| Chinajiji 回复于:2002-10-31 13:24:21
| 写得好! 能写出以上内容,说明老兄有相当丰富的编程经验!有许多值得借鉴的地方. 我提出以下意见供你参考并与大家讨论: 1)文中有许多涉及编程风格的内容,如果规定得太死,是不是有损c/c++书写灵活的优点?虽然你提供的风格都有一定的可取之处,但风格不是唯一的.我觉得只要在风格不损害大原则的前提下,还是不规定得太多太死为好,国有企业就是管得太多太死而失去了活力的.^_^ 例如:void f(void){ .................. } 与 void f(void) { .......... } 都可以,可读性第一种比第二种不会差多少,但第一种更紧凑.建议你用"必须,禁止,宜,不宜"等字来描述. 2)建议加几条: a:有可利用的标准库函数,一般情况下优先使用之,最好不要自己重写. b:能拆分成多个函数的函数,不要合成一个. c:能避免使用指针的情况下,宜尽量避免使用. d:定义一个变量时,尽可能立即初始化它. e:class的定义和实现要分开(inline函数除外) f:类型转换用static_cast<>,const_cast<>或reinterpret_cast<>;在用后两种,特别是最后一种类型转换时表示你屏蔽了编译器的类型检查,所以首先要想想是不是可以避免使用类型转换. 3)对于文中所提到的以下内容: D.类中的常量; 整个类中都恒定的常量可以用枚举型的变量来定义; class A { enum { SIZEMAX = 100, SIZEMIN = 200} int Array[SIZEMIN]; }; 我个认觉得写成这样更好: D.类中的常量; class A { const int SIZEMAX = 100; const int SIZEMIN = 200; int Array[SIZEMIN]; }; 原因我想你知道.但有一个问题:在Vc6.0下会出现编译错!我faint!标准c++是可以的.注意:在class的定义中,除了const int以外都不能这样做,如class A{ public:const float PI=3.1415; }; 错! class A{ public: static int MAX=10;//错! }; class A{ public: const int array[]={1,2,3};//错!不能这样初始化数组! };
我觉得在定义一个class时,public 在最前好,因为public是接口,别人读你的class时,首先读到的就会是interface;而不是implement;更多的人关心的是interface而不是implement;不过private memeber 在前对class 设计者要方便些,因为public member function常要用到private member,如果public member function 先于private member书写,此时private member却还没写好,这样就不方便了.
4)以下内容中你写了一个错别字: "4表达式和基本语句。 A.加上括号以使运算的优先级鲜明。 B.复合表达式注意: a.别台(太)复杂。"
谢谢你给大家提供了一篇有价值的文章,继续努力!
| | goodboy 回复于:2002-10-31 15:32:15
| 都是高手,给我推荐两本c语言好书呀!我要精通C语言,我现在还是毛头小子
| | jerryesquire 回复于:2002-10-31 17:44:24
| 不错!
| | zglcl008 回复于:2002-10-31 20:00:36
| 开发约定 还行,继续努力吧,
| | 春华 回复于:2002-10-31 22:03:17
| 太好了谢谢谢谢啊 但我想提一点意见. 每日一贴可能有点不妥.因为简单的就好,但如果有的会可能一天还消化不完,那就
| | HopeCao 回复于:2002-11-01 12:57:49
| 似曾相识啊!!??
| | windtouch 回复于:2002-11-01 13:38:09
| ludejun98 Chinajiji 太感谢你们了!!! 希望像zglcl008一样的高手能发表些意见,让我们这些菜鸟学习学习 谢谢!!
| | ludejun98 回复于:2002-11-01 13:46:17
| class A { const int SIZEMAX = 100; const int SIZEMIN = 200; int Array[SIZEMIN]; }; 老兄,这就是功底的问题。了。在A进行初始化的时候,系统找不到const,所以会报错。
| | Chinajiji 回复于:2002-11-01 14:21:51
| 对不起,我写掉了一个关键的"static"改为: class A{ public: static const int SIZEMAX = 100; static const int SIZEMIN = 200; int Array[SIZEMIN]; }; 如果没有static 当然不行啊.再次道歉!
| |
|