C每日一读(一)

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.用于出错处理的返回值一定要清楚。让读者不容易忽视、误解错误信息。

posted @ 2005-09-20 17:17  獨孤劒  阅读(146)  评论(0编辑  收藏  举报