目录
基本的代码规范
程序版式
对齐(Alignment)与缩进(indent)
变量的对齐规则
空行——分隔程序段落的作用
代码行内的空格——增强单行清晰度
代码行
长行拆分
标识符命名规则
标识符命名的共性规则
windows应用程序命名规则
灵活运用的命名规则
简化的windows应用程序命名规则
注释规范
不好的注释
好的注释
在哪些地方写注释?
基本的代码规范
Basic rules and guidelines of Coding Style
*程序版式
*程序注释
*命名规则
追求
*清晰、整洁、美观、一目了然
*容易阅读,容易测试程序版式
程序版式
对齐(Alignment)与缩进(indent)
——保证代码整洁、层次清晰的主要手段
*位于同一层{和}之内的代码在{右边数格处左对齐
*同层次的代码在同层次的缩进层上
*现在的许多开发环境、编辑软件都支持“自动缩进”
*VC中有自动整理格式功能(ALT+F8)
*一般用设置为4个空格的Tab键缩进,不用空格缩进
变量的对齐规则
*数据类型+n个TAB+变量名+[n个TAB]+=+[初始化值];
*例
char name[20];
char addr[30];
char sex="F";
int age=20;
float score=90;
空行——分隔程序段落的作用
*在每个函数定义结束之后加空行
*在一个函数体内,相邻两组逻辑上密切相关的语句块之间加空行,语句块内不加空行
代码行内的空格——增强单行清晰度
*关键字之后加空格,但函数名之后不加空格
*赋值、算术、关系、逻辑等二元运算符前后各加一空格
*但一元运算符以及[ ] . - >前后不加空格
sum = sum + term;
*(向后紧跟,) , ; 向前紧跟,紧跟处不留空格,,;后留一个空格
Function(x, y, z)
for (initialization; condition; update)
*对表达式较长的for和if语句,为了紧凑可在适当地方去掉一些空格
for (i=0; i<10; i++)
if ((a+b>c) && (b+c>a) && (c+a>b))
代码行
一行只写一条语句,便于测试
一行只写一个变量,便于写注释
int width; //宽度
int height; //高度
int depth; //深度
int width,height,depth; //宽度高度深度(不建议)
尽可能在定义变量的同时,初始化该变量
int sum = 0;
if、for、while、do等语句各占一行,便于测试和维护
if (width < height)
{
DoSomething();//执行语句无论有几条都用{和}将其包含在内
}
长行拆分
代码行不宜过长,应控制在10个单词或70~80个字符以内
Studies show that up to ten-word text widths are optimal for eye tracking
实在太长时要在适当位置拆分,拆分出的新行要进行适当缩进
if ((veryLongVarl >= veryLongVar2)
&&(veryLongVar3 >= veryLongVar4))
{
DoSomething();
}
double FunctionName(double variablename1,
double variablename2);
for (very_longer_initialization;
very_longer_condition;
very_longer_update)
{
DoSomething();
}
标识符命名规则
按照执行级别分为:
*共性规则——必须执行
*简化规则——建议采用
*可选规则——灵活运用
标识符命名的共性规则
有意义,直观可拼读,见名知意,不必解码
最好采用英文单词或其组合,切忌用汉语拼音,尽量避免出现数字编号
不要出现仅靠大小写区分的相似的标识符
不要出现名字完全相同的局部变量和全局变量
用正确的反义词命名具有互斥意义的变量或相反动作的函数
*int minValue;
*int maxValue;
*int GetValue(...);
*int SetValue(...);
尽量与所采用的操作系统或开发工具的风格保存一致
*在Linux/Unix平台
习惯用“小写加下划线”
function_name
variable_Name
*Windows风格
大小写混排的单词组合而成
FunctionName
variableName
windows应用程序命名规则
Microsoft公司的Hungarian Notation
主要思想
在变量和函数名前加上前缀,用于表示变量的数据类型
【限定范围的前缀】+【数据类型前缀】+【有意义的英文单词】
限定范围的前缀
静态变量前加前缀s_ , 表示static
全局变量前加前缀g_,表示global
默认情况为局部变量
数据类型前缀
ch 字符变量前缀
i 整形变量前缀
f 实型变量前缀
p 指针变量前缀
灵活运用的命名规则
限定范围的前缀与数据类型前缀可要可不要
无特殊意义的循环变量可以直接定义成i,j,k等单词变量
int i, j, k;
float x, y, z;
*若采用匈牙利命名规则,则应写成
int iI,iJ,iK; //前缀i表示int类型
float fx,fy,fz; //前缀f表示float类型
简化的windows应用程序命名规则
变量名形式
*小写字母开头,“名词”或者“形容词+名词”
oldValue,newValue
函数名形式
*大写字母开头,“动词”或者“动词+名词”(动宾词组)
GetValue(),SetValue()
宏和const常量全用大写字母,并用下划线分隔单词
#define ARRAY_LEN 10
const int MAX_LEN=100;
注释规范
写注释给谁看?
*给自己看,使字节的设计思路得以连贯
*给继任者看,使其能接替自己的工作
写注释的最重要的共性在于传承
*要站在继任者的角度写
*简单明了、准确易懂、防止二义性
*让继任者可以轻松阅读、复用、修改自己的代码
*让继任者轻松辨别出哪些使字节写的,哪些是被人写的
不好的注释
好的注释
在哪些地方写注释?
在重要的文件首部
文件名+功能说明+【作者】+【版本】+【版权声明】+【日期】
在用户自定义函数前,对函数接口进行说明
函数功能+入口参数+出口参数+返回值(包括出错处理)
在一些重要的语句上方
对代码的功能、原理进行解释说明
在一些重要的语句行右方
定义一些非通用的变量,函数调用,较长的、多重嵌套的语句块结束处
*在修改的代码行旁边加注释
*在调试程序中对暂不使用的语句通常可先用注释符括起来,使编译器跳过这些语句
可灵活运用的一些规则
*注释可长可短,但应画龙点睛,重点加载语义转折处
*简单的函数可以用一句话简单说明
//两数交换
void Swap(int *x, int *y)
*内部使用的函数可以简单注释,供被人使用的函数必须严格注释,特别是入口参数和出口参数