Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3476431
  • 博文数量: 1450
  • 博客积分: 11163
  • 博客等级: 上将
  • 技术积分: 11101
  • 用 户 组: 普通用户
  • 注册时间: 2005-07-25 14:40
文章分类

全部博文(1450)

文章存档

2017年(5)

2014年(2)

2013年(3)

2012年(35)

2011年(39)

2010年(88)

2009年(395)

2008年(382)

2007年(241)

2006年(246)

2005年(14)

分类: C/C++

2009-06-29 10:31:25

译自 Developer Library » Symbian OS Guide » Essential idioms » Naming conventions
  概要
  Symbian OS上的应用程序使用一组标准的约定来命名类(class)、结构(struct)、变量(variable)、函数(function)、宏(macros)、枚举(enumeration)和常量(constant)。本主题解释这些约定的意思。
  类(class)的命名
  大多数类的命名是通过加前缀字符C,T,R,M构成的。下面简单说一下它们表示的意思:
  C:C前缀表示类从CB ase派生并应该基于堆构造。
  T:T前缀表示一个简单类,这种类不拥有任何额外的资源。
  R:R前缀表示一个资源类,它包含其它位置拥有资源的句柄。
  M:M前缀表示一个接口类,它定义了接口但需要派生类实现。
  有关前缀更详细的论述请参考 类类型(Class types--Developer Library » Symbian OS Guide » Essential idioms » Class types)。
  那些由静态函数构成的类没有前缀字符。除了前缀字符,类名常常通过一个名词表示类的用途。
  结构(struct)的命名
   结构(struct)类型作为T类对待,因为它也不拥有任何额外的资源,它的前缀通常是T(但也有一些以S开头)。
  变量的命名
   成员变量的名字以i开头,例如:iMember,这样可以很容易检查某些清除相关的规则。参数名以a开头,例如:aControl或aIndex。局部变量命名不需要前缀字符。全局变量应避免使用,使用时则第一个字母大写。
   Symbian不使用匈牙利(Hungarian)或是其它在名字中包含类型信息的名字方法:那样的话看起来很复杂并且当系统有几百个类时不容易管理,因为它们总是不够准确:函数通常很短,这样可以方便的看到其中定义的变量的类型并且类浏览器(class browser)提供了快速找到类成员类型的方法。
  函数的命名
  函数的名字应当指出它要做什么,通常用动词表示,“获得”类的函数是例外的情况:一个返回成员变量的函数,它的名字通常是除去前缀“i”的变量名:
  inline RWindow& Window() const { return iWindow; };
   一个对应的“设置”函数包含单词“Set”,例如:SetWindow()。
   出现错误而终止函数时Symbian平台并不使用标准C++的异常处理,它有自己名叫leave的异常处理系统(参考» Developer Library » Symbian OS Guide » C++ API guide » Base » Memory Management » Cleanup Support Overview)。可能产生leave的函数名字以L结尾,它使得检查错误的过程更简单些。函数new (ELeave)也可能产生leave。最基本的产生leave的函数是User::Leave()。任何函数中包含有上面的函数并且没有捕获异常,那么它就可能产生异常,在写代码时它的名字就应该以L结尾。如果一个函数调用另一个可能产生leave的函数,它的名字也应该以L结尾。
   与leave机制关联的是清除栈(cleanup stack),它可以在leave产生时恢复在堆上分配的内存。把资源放到清除栈(cleanup stack)上的分配或构造函数以LC结尾,例如,经常把new,PushL(),ConstructL()按顺序封装到NewLC()函数里:
  CS* s=CS::NewLC(p1, p2);
  上面的操作是分配对象,初始化并把它放到清除栈(cleanup stack)上,这个过程可能会产生leave(它总是包含PushL()的调用),所以这类的函数名总是包含有L,因此形成了以LC(C指清除栈(cleanup stack))结尾。
   获得对象的所有权并销毁它的函数的名字以D结尾。UI框架中对话框的例子:
   CEikDialog* dialog=new (ELeave) CBossSettingsDialog;
  if (dialog->ExecuteLD(R_BOSS_SETTINGS_DIALOG))
   {
   // handle successful settings
   }
   ExecuteLD()函数包含第二阶段构造(second-phase construction),显示对话框然后销毁它的操作。
  宏的命名
  宏的名字全部用大写表示并用下划线分隔单词。
  枚举的命名
  枚举按下面的方法命名:
   枚举当做简单类型,拥有T前缀;
   枚举成员拥有E前缀;
   类型和成员应该是有意义的,没有二义性的名字。
   枚举应当被封装到相关的类里,那样就不会与全局名字产生冲突。
   下面是一个定义和使用枚举的例子:
   class TDemo
   {
  public:
   enum TShape {EShapeRound, EShapeSquare};
   };
  TDemo::TShape shape=TDemo::EShapeSquare;
  常量的命名
   常量名包含一个K前缀,例如:
   const TInt KMaxNameLength=0x20;
阅读(375) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~