在一个项目的代码中看到,将结构体与枚举的首个成员都用做了保留项,感觉像是某种防错机制,或者是特殊考虑,从没见过这种用法,但是根据代码整体来看,代码作者水平还可以,因此这样设计一定是有特殊的考虑,不知有没有高手明白这这样设计的原因?
typedef enum
{
ID_ErrKZM, //捕鼠器
ID_KZM1,
ID_KZM2,
}ID_KZM;
static const struct
{
INT8U num;
INT8U len;
INT16U dAddr;
INT16U iAddr;
}TAB_INCD[ID_IncdNum] =
{
{0, 0, 0xFFFF, 0xFFFF }, //捕鼠器
{NUM_LPo, LEN_LPo, DE_LostPower, IE_LPo },
{NUM_Program, LEN_Program, DE_Program, IE_Program },
};
对于枚举,通常会用 0 值来表示一些默认的情况。比如说上下左右四个方向分别用 1~4 来表示,那数据初始并不知道是哪个方向的时候就用 0 来表示。如果定义枚举的时候四个有效方向定义在 0~3,那么在未知的情况下怎么办?对于 4 个无差别的方向,用哪个来表示默认值似乎都不好。(C 语言不记得了,好像未赋初值为随机;但是其他很多语言中基于整数的类型,包括枚举定义时不赋值为默认 0 值)
对于结构体,同样的需要一个初始值。假设我们始终使用的是指针(如果是定义实体,好像默认会按每个属性的初始值来构造),一般初始化会有两个选择:一个是
NULL
,一个是指向初始的实体。在使用的时候,如果是 NULL 需要先判断,再取属性。但如果是初始的实体,那就不只需要担心 NULL 的问题。当然在实际应用的,有时候 NULL 可能会比较好用。有时候定义一个
0xffff
作为枚举默认值也并无不可,所以并没有一个非常确定的做法,只是说题中的做法,可能相对通用性更强,也比如符合程序员们的常识。