PersonalCorpus 版 (精华区)

发信人: Sun (大灯泡), 信区: SoftEng
标  题: 谈谈代码风格——谈谈标识符命名
发信站: 紫 丁 香 (Tue Apr 11 10:24:04 2000), 转信

    标识符包括自定义数据类型名、函数名、变量名、宏名,这些都是需要用户自己起
名的。如何起一个简洁明了的名字,是代码风格要研究的主要问题。

    一个标识符的名字通常分为三部分——作用域前缀、类型前缀、功能描述。
    
    最体现编程者的匠心的,是功能描述部分,他是名字的主体。最有代表性的命名,
可以说就是Windows的API函数了。象SetWindowText,GetWindowText,功能一目了然。
这部分的命名我归纳为如下的原则:

    1. 每个单词首字母大写。GetNextWindow肯定是比getnextwindow更醒目一些;
    2. 注意运用缩写。有时要表达的意思描述太长,增加了输入的负担,,就用缩写
       的单词来描述,比如:SendMessageToRemoteCompter, 缩写成SendMsgToRPC;
    3. 数据类型建议全部用大写字母来命名,以便和函数、变量区分;
    4. 宏名也使用大写字母,单词间用下横杠'_'连接。如:HUMAN_COUNT
    
    作用域前缀表示函数、变量的在哪个区间有效,位于一个变量名的最前面。比如,
MFC对全局函数都定义了一个Afx前缀。通常,对全局变量使用'g_'前缀,对类成员变量
使用'm_'前缀,局部变量省略前缀。

    作用域前缀对变量非常有用,除了可以通过变量名就知道变量的作用域外,还可以
防止因为变量名相同导致的错误的变量覆盖的问题,以及能更充分地利用名字资源。比
如你有一个全局计数器和一个局部计数器,都命名为Counter是不行的,一个用g_nCounter,
一个是nCounter,就解决问题了。

    作用域前缀对函数应用不多,许多函数都省略了作用域前缀,这也是有一定道理的。
对于顺序式、结构化程序来说,函数基本上都是全局的,那么再用作用域描述就显得罗
嗦了。面向对象程序设计,函数的调用都有严格的类域限制,也就不需要在函数名上做
文章了,至多给很少的几个全局函数加个前缀罢了。
    
    类型前缀对变量而言,非常重要。目前使用类型前缀的事实标准是“匈牙利表示法”。

    这种表示法是在作用域和功能描述中间插入一个说明类型的标记,也主要用于变量
的命名。比如:int m_nCounter; BOOL bIsTrue; 具体的类型与标记的对应,请察看
“匈牙利表示法”的说明,本文的附录部分也有常用的标记介绍。

***************************************************************************

    关于代码风格,除了本文提及的缩进、标识符命名外,还包括接口定义、注释、文
档等许多内容。由于本人的精力、经验所限,不能一一详述了。代码风格是习惯成自然
的东西,我所提到的都是比较流行的风格,并不一定要遵守,你可以根据个人习惯制定
出更符合实际的风格。在这方面,并没有一个统一的国际化的强制标准,有的仅仅是你
工作的团体、公司所制定的标准。为了与他人更好地合作,也为了保住你自己的饭碗,
公司的标准是必须遵守的。


--
    太阳就是个大灯泡。(自创)
    先天下之光而光,后天下之脱而脱。(摘抄)

※ 来源:.紫 丁 香 bbs.hit.edu.cn.[FROM: 202.118.239.237]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.142毫秒