匈牙利 规范

本命名取自“匈牙利”法,仅供参考。

数据类型的命名规则参考:
定义类型:
前缀    类型                    类型描述            示例                    所占字节(Win32)    有效值                    取值范围
b        Boolena-布尔            1Bit的标志            bool           bFlag            4        (TRUE/FALSE)            (0x0 ~0x1)
           
/* typedef int bool */
----------------------------------------------------------------------------------------
by        Byte 字节                无符号的8bit字节    unsigned
char  byValue;            1        0   ~255                (0x0 ~0xFF)
ch        Char 字符                有符号的8bit字节    signed  
char  chValue;            1        -128~127                (0x80~0x7F)
----------------------------------------------------------------------------------------
w        不带符号的Word字        无符号的16bit整数    unsigned
short wValue;            2        0     ~65535            (0x0   ~0xFFFF)
sw        带符号的16位整形数        有符号的16bit整数    signed  
short swValue;            2        -32768~32767            (0x8000~0x7FFF)
----------------------------------------------------------------------------------------
dw        不带符号的doubleword字    无符号的32bit整数    unsigned
int   dwValue;            4        0          ~4294967295    (0x0       ~0xFFFFFFFF)
n        带符号的32位整形数        有符号的32bit整数    signed  
int   nValue;            4        -2147483648~2147483647    (0x80000000~0x7FFFFFFF)
----------------------------------------------------------------------------------------
f        单精度浮点数            单精度浮点数       
float          fValue;            4
d        双精度浮点数            双精度浮点数       
double         dValue;            8
----------------------------------------------------------------------------------------
p        指针(pointer)            指针               
char           *pchName;        4
pc        const指针(pointer)        const指针           
const char     *pcchName;        /
           
/* unsigned char *pbyData; /  unsigned short *pwData;  */
           
/* const int *pcnData;     /  unsigned int *pdwData;   */
----------------------------------------------------------------------------------------
t        typedef自定义类型        struct结构体等类型    TNameInfo      tName;           
/
pt        自定义类型指针            struct结构体指针等    PTNameInfo    
*ptName;            /
----------------------------------------------------------------------------------------
a        Array数组                数组               
char           achName[20];        /
aa        二位Array数组            多位数组            unsigned
char  aabyName[4][2];    /
----------------------------------------------------------------------------------------
ap        存放指针的数组            存放指针的数组       
char           *apchName[2];    /
pa        指向数组的指针            指向数组的指针        unsigned
char  *pabyName;        /
----------------------------------------------------------------------------------------
em        enum枚举类型            枚举类型            EM_NAME        emName;           
4
c        class类                    class类                CName          cName;           
/
----------------------------------------------------------------------------------------
pf        函数指针(pointer func)    函数指针            typedef
int (*pfMsgFunc)(int type);
----------------------------------------------------------------------------------------
s_        静态变量(
static)        静态变量            static int     s_nValue;
g_        全局变量(
global)        全局变量            int            g_nValue;
m_        类的数据成员(member)    类的数据成员       
int            m_nValue;


函数名的命名规则参考:

1. 函数名的首字母建议大写,函数名采用大小写字母结合的形式
int GetMaxValue(void)
{
   
do someting;
}

2. 定义函数时,若函数无返回值,请冠以void 函数名格式;若函数无参数,请在参数中写入void格式;
void InitData(void)
{
   
do someting;
}

1. 全局函数的名字应当使用“动词”或者“动词+名词”(动宾词组)。
DrawBox(
void); // 全局函数

2. 用正确的反义词组命名具有互斥意义的变量或相反动作的函数等。
void SetValue(int nValue)
{
    g_nValue
= nValue;
}

int GetValue(void)
{
   
return g_nValue;
}

3. 回调函数最好出现“CB”字符;
    typedef
int (*pfTimerCB)(int type);
    CreateTimer(g_TaskTimer, TaskTimerCB, NULL);

3. 在同一软件产品内,避免重名的函数出现
我们在不同的文件中都可以通过定义同样的函数
模块A
static void InitData(void); // 最好改成 static void InitAData(void);
模块B
static void InitData(void); // 最好改成 static void InitBData(void);

4. 函数名的长度最好小于30字符内。可以使用缩略词语,但是要有必要的全词注释。
tSysPara
*GetSysPara(void) // tSystemPara *GetSystemParameter(void)

5. 一个函数代码最好控制在100行以内,一个模块文件,代码最好控制在1000行以内。

6. 最后,还有一点小小的建议,就是无论我们使用那种工具编写代码,VC6.0,SourceInsignt,UltraEdit,等
请按照格式排板,对齐,并将tab转换成4个空格,这样便于察看,修改等。


代码示例:与零值比较(摘自林锐博士
-高质量C++/C 编程指南)

1. 布尔变量与零值比较
不可将布尔变量直接与TRUE、FALSE 或者1、
0 进行比较。
根据布尔类型的语义,零值为“假”(记为FALSE),任何非零值都是“真”(记为TRUE)。TRUE 的值究竟是什么并没有统一的标准。例如Visual C
++ 将TRUE 定义为1,而Visual Basic 则将TRUE 定义为-1
假设布尔变量名字为flag,它与零值比较的标准if 语句如下:
   
if (flag)  // 表示flag 为真
    if (!flag) // 表示flag 为假
其它的用法都属于不良风格,例如:
   
if (TRUE == flag)
   
if (1 == flag)
   
if (FALSE == flag)
   
if (0 == flag)

2. 整型变量与零值比较
应当将整型变量用“
==”或“!=”直接与0 比较。
假设整型变量的名字为value,它与零值比较的标准if 语句如下:
   
if (0 == value)
   
if (0 != value)
不可模仿布尔变量的风格而写成
   
if (value) // 会让人误解 value 是布尔变量
    if (!value)

3. 浮点变量与零值比较
不可将浮点变量用“
==”或“!=”与任何数字比较。
千万要留意,无论是float 还是double 类型的变量,都有精度限制。所以一定要避免将浮点变量用“
==”或“!=”与数字比较,应该设法转化成“>=”或“<=”形式。
假设浮点变量的名字为x,应当将
   
if (0.0 == x) // 隐含错误的比较
转化为
   
if ((x>=-EPSINON) && (x<=EPSINON))
其中EPSINON 是允许的误差(即精度)。
C
++
const float EPSINON = 0.00001;
C
#define EPSINON   (float)0.00001

4. 指针变量与零值比较
应当将指针变量用“
==”或“!=”与NULL 比较。
指针变量的零值是“空”(记为NULL)。尽管NULL 的值与0 相同,但是两者意义不同。假设指针变量的名字为p,它与零值比较的标准if 语句如下:
   
if (NULL == p) // p 与NULL 显式比较,强调p 是指针变量
    if (NULL != p)
不要写成
   
if (0 == p) // 容易让人误解p 是整型变量
    if (0 != p)
或者
   
if (p) // 容易让人误解p 是布尔变量
    if (!p)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值