业精于勤而荒于嬉,行成于思而毁于随!
分类: C/C++
2014-10-15 11:14:50
点击(此处)折叠或打开
- // 版权和版本声明此处省略
- #ifndef GRAPHICS_H // 防止 graphics.h 被重复引用
- #define GRAPHICS_H
- #include <math.h> // 引用标准库的头文件
- ...
- #include “myheader.h” // 引用非标准库的头文件
- ..
- void Function1(...); // 全局函数声明
- ...
- class Box // 类结构声明
- {
- ...
- };
- #endif
(此处)书写范例
- // 版权和版本声明此处省略。
- #include “graphics.h” // 引用头文件
- ...
- // 全局函数的实现体
- void Function1(...)
- {
- ...
- }
- // 类成员函数的实现体
- void Box::Draw(...)
- {
- ...
- }
版权和版本的声明位于头文件和定义文件的开头1>版权信息2>文件名称,标识符,摘要
3>当前版本号,作者/修改者,完成日期
4>版本历史信息
点击(此处)折叠或打开
- /*
- * Copyright (c) 2014,xxxxx有限公司
- * All rights reserved.
- *
- * 文件名称:xxx.h
- * 摘 要:简要描述本文件的内容
- *
- * 当前版本:1.1
- * 作 者:输入作者(或修改者)名字
- * 完成日期:2014 年 6 月 25 日
- *
- * 取代版本:1.0
- * 原作者 :输入原作者(或修改者)名字
- * 完成日期:2001 年 5 月 10 日
- */
一> 在每个类声明之后、每个函数定义结束之后都要加“空行”
二>十二> 代码行最大长度宜控制在 70 至 80 个字符以内。代码行不要过长一行代码只做一件事情
三> 一元操作符(如 “!” 、 “~” 、 “++” 、 “--” 、 “&” 等)前后不能加空格
四> 尽可能在定义变量的同时初始化该变量(就近原则)
五>关键字之后要留空格。象 const、virtual、inline、case 等关键字之后至少要留一个空格,否则无法辨析关键字。象 if、for、while 等关键字之后应留一个空格再跟左括号"(",以突出关键字。
六>函数名之后不要留空格,紧跟左括号‘(’ ,与关键字相反。
七>‘(’向后紧跟,‘)’ 、‘,’ 、‘;’向前紧跟,紧跟处不留空格
八>‘,’、‘;’前紧跟,后留空格
九> 赋值操作符、比较操作符、算术操作符、逻辑操作符、位域操作符(如“=” 、 “+=” “>=” 、 “<=” 、 “+” 、 “*” 、 “%” 、 “&&” 、 “||” 、 “<<”、“^”等)二元操作符的前后应当加空格
十>象“ [ ] ” 、 “.” 、 “->”这类操作符前后不加空格
十一>if、for、while、do 等语句自占一行,执行语句不得紧跟其后。不论执行语句有多少都要加{}
十三> 长表达式要在低优先级操作符处拆分成新行,操作符放在新行之首(以便突出操作符)
十四> 应当将修饰符 * 和 & 紧靠变量名
十五> 注释的位置应与被描述的代码相邻,可以放在代码的上方或右方,不可放在下方。
- char *name;
- int *x, y; //int* x, y; 容易引起误解(y并不是指针)
1 > 变量的名字应当使用“名词”或者“形容词+名词”
- float value;
- float oldValue;
- float newValue;
2> 全局函数的名字应当使用“动词”或者“动词+名词”(动宾词组)。类的成员函数应当只使用“动词”,被省略掉的名词就是对象本身
- DrawBox(); // 全局函数
- box->Draw(); // 类的成员函数
3 > 用正确的反义词组命名具有互斥意义的变量或相反动作的函数等
- int minValue;
- int maxValue;
- int SetValue(...);
- int GetValue(...);
4 > 尽量避免名字中出现数字编号,如 Value1,Value2 等,除非逻辑上的确需要编号
5 > 类名和函数名用大写字母开头的单词组合而成
- class Node; // 类名
- class LeafNode; // 类名
- void Draw(void); // 函数名
- void SetValue(int value); // 函数名
6 > 变量和参数用小写字母开头的单词组合而成
- BOOL flag;
- int drawMode;
7 > 常量全用大写的字母,用下划线分割单词
- const int MAX = 100;
- const int MAX_LENGTH = 100;
8> 静态变量加前缀 s_(表示 static)
- void Init(…)
- {
- static int s_initValue; // 静态变量
- ...
- }
9> 如果不得已需要全局变量,则使全局变量加前缀 g_(表示 global)
- int g_howManyPeople; // 全局变量
- int g_howMuchMoney; // 全局变量
10> 类的数据成员加前缀 m_(表示 member) ,这样可以避免数据成员与成员函数的参数同名
- void Object::SetValue(int width, int height)
- {
- m_width = width;
- m_height = height;
- }
异同: const常量有数据类型,而 #define 没有,编译器对前者进行类型安全检查,后者仅字符替换。
#define // 宏常量
const // const 常量
const修饰指针
- const int variable;
- int const variable;
- const int array[];
- int const array[];
- //以上两组没有区别
注:提倡如果参数是指针,且仅作输入用,在类型前用 const 修饰,防止该指针被意外修改。
- const int *var;
- int const *var;
- //以上两句没有区别,const 修饰指向对象,var可变,var指向对象不可变
- int *cosnt var; // const 修饰 指针var,指针var不可变,var指向对象可变
- const int *cosnt var; // 指针及指向对象都被const 修饰,不可变
1> BOOL 布尔变量
不可将布尔值直接与 TRUE 、FALSE 或 1 、0 比较
- 规范比较:
- BOOL flag;
- ...
- if (flag)
- if (!flag)
2> int 整型变量
将整型变量直接用 “==”或“!=” 与 “0”比较
- 比较规范:
- int valu;
- ...
- if (valu == 0)
- if (valu != 0)
3> float/double 浮点变量
不可与整型变量一样比较,无论是 float 还是 double 都是有精度限制。所以规范比较应该转化为 “>=”“<=”形式
- 规范比较:
- float valuf;
- ...
- if (valuf == 0.0) //隐含错误比较
- if (valuf >= -EPSINON) && (valuf <= EPSINON) // EPSINON 为允许的误差(精度)
4> * 指针
使用 “==” “!=” 与 NULL 比较,尽管 NULL 与 “0” 值相同,但两者意义不同
- 比较规范:
- if(p == NULL)
- if(p != NULL)
- 或者
- if(NULL == p )
- if(NULL != p )
- // 推荐使用后者,防止漏写成 " p = NULL" ,有利于编译器报错