手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>程序设计>C/C++>列表

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

来源:互联网 作者:west263.com 时间:2008-02-23
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

原帖地址: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不是很方便的。

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




文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

热点关注
IDC资讯 虚拟主机 域名注册 托管租用 vps主机 智能建站
网站运营 建站经验 策划盈利 搜索优化 网站推广 免费资源
网站联盟 联盟新闻 联盟介绍 联盟点评 网赚技巧
行业资讯 业界动态 搜索引擎 网络游戏 门户动态 电子商务 广告传媒
网络编程 Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术 Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷 Internet Explorer
网页制作 FrontPages Dreamweaver Javascript css photoshop fireworks Flash
程序设计 Java技术 C/C++ VB delphi
网络知识 网络协议 网络安全 网络管理 组网方案 Cisco技术
操作系统 Win2000 WinXP Win2003 Mac OS Linux FreeBSD
返回首页 |关于我们 | 联系我们 | 付款方式 | 创业联盟 | 价格总览 | 资讯中心 | 友情链接 | 网站地图 | 招贤纳士 | RSS