谈谈C 的程式规范--变量命名

2008-02-23 05:24:08来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

原帖地址:http://www.bc-cn.net/bbs/dispbbs.asp?BoardID=56&id=61027

首先我不是C 的专家,甚至能够说我是新手。其次我没有看过专门讲程式规范的书,这里所谈到的主要是平时看书时随时记下的或多年写程式的经验。我工作的地方对程式风格的需要也没有一些公司需要的那么严,所以文中肯定有很多不对的地方,希望大家指正。

说起程式规范,内容实在太多了,这里先浅谈一点变量命名规范吧。

变量的命名十分重要,假如您在一个较大的项目中写程式,或希望自己现在写好的程式几个月后任何人拿来都能清楚的看懂,命名规范是不可缺少的。

先说的第一点就是名字本身一定要有意义,让人看了这个变量就知道他是干什么的。这大概是几年前我看一本Java的书时提到的,其中重点强调的就是人们写程式循环或临时用一下的变量总将其命名为int i, j , k之类的,这是个极坏的习惯,改掉这个毛病之后我发现自己的程式易读性增强了很多。一次我们组一个很聪明的同事写一段比较复杂的字符串分析的程式,任何字符指针都用char *i, *j, *k来表示,由于分析比较复杂,当他用到char *n的时候终于受不了了。把每个变量都按照他的意义重写。字串中第一此出现逗号的位置就叫 char *pchrFirstComma, 等等,一下子程式显得清楚了无数。建议大家都这么作。真的是临时用一下就扔掉的临时变量就叫int intTemp, 或float fTemp之类的。

第二点大概是用VC 用多了的习惯,就是任何的成员变量前面都写一个m_,这样很清楚的区分开个成员变量和临时变量,不会出现以下情况
class A
{
A(int intNumber);
int intNumber;
}

A:A(int intNumber)
{
//这里intNumber到底是成员变量还是;临时变量?当然您能够分析出来,再用this->来区分,但是这完全是无用功,假如变量名起的好,这个问题根本就不会出现。
}

第三点是变量名前面最好用几个字母表示其类型。微软提倡的是他们的一位传奇工程师流下的规范,?quot;Hungarian notation",大概翻译成匈牙利命名法,整数用int,浮点数用flt,字符用chr。我觉得三个字母的限制有时后有些太局限,就自己加了些自己能懂得。显然CString和string都很符合叫str,最好自己规定清楚。有时候数据是个很复杂的class的vector,我会起个超长的名字。

第四是全局变量,这在C 中是最不被推荐的,假如一定有必要,最好用static class之类的包起来。

第五是全局常量,用全局常量无可厚非,但不小心的话也会出现混乱。比如我定义了一个全局变量叫const int intTotalStepNumber = 8;下次我再写程式的时候某个函数大概也需要意思差不多的临时变量,只要还是我来写,就肯定还会命名成intTotalStepNumber,不一定什么时候这两个名字就会混淆。最保险的办法是给全局常量加一个namespace
namespace Programinfo
{
const int intTotalStepNumber = 8;
};

这样用的时候就不会混淆了,临时变量叫intTotalStepNumber,全局变量叫Programinfo::intTotalStepNumber

最后说一下scope。人们都说变量随时用随时定义会节约空间。其实这不是绝对的。没准能省一点点,但同时增加了不少危险。具体performance怎么样还要具体分析。不是个一句话旧能说清的。但由此出现的问题是变量名的混淆。下面是我犯过的一个错误。
AA::funA()
{
int intStepNumber=GetStepNumber();
.... 一大堆程式


....N天后加了这么一段
if ()
{
... 又过了N天,在这加一段,大概早就忘了intStepNumber已定义过了,虽说函数大小最好别超过一篇纸的长度,您也不能指望我每张纸都读的丝毫不差呀。
int intStepNumber;

....3N天之后。
if (intStepNumber == ???)
// 这就等着crash 吧,因为intStepNumber = -34567
}
}

所以尽量在合理的时候把变量名写在同一个scope下会安全很多,因为要用前缀或后缀区分scope不是很方便的。

先写到这里,以后在随时整理。




标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: 学生管理系统框架

下一篇: Singleton的C 实现 及相关问题

热门词条
热门标签