宏的另一種用法

這裡要說的不是用宏來防止頭文件重複包含。

在結構中定義一個宏,以前在公司的軟件里,他們經常這樣用,還是比較巧妙的。

 

比如一個接口結構:

//邏輯接口
typedef struct  tag_stRM_IM_LogicIntf
{
    VOS_U32 u32IfnetIndex;
    VOS_U32 u32PhyIndex;
    //VOS_U32 u32LogicIndex;
    STIP_CONFIG stIpCfg;
    ENRM_IM_INTF_STATUS enStatus;
    VOS_U8 u8RefCount;

    #define u32LogicIndex stIpCfg.u32IpAddress
    #define u32IntfIpAddress u32LogicIndex
}STRM_IM_LOGICINTF, * PSTRM_IM_LOGICINTF;


這個接口有一個IP地址,在成員stIpCfg里,同時接口又有一個索引,應該叫u32LogicIndex,情況是索引就是該接口的IP地址,但是意義不同。

我們固然可以二者都聲明,但是:

1、兩份數據重複了;

2、要保證數據的一致性。

這樣很不爽。於是乎採用了剛才的方法。

因為接口的IP地址是本質,所以IP地址還是要聲明的。索引只是一個邏輯上的概念,它就是接口的IP,所以我們在結構內定義一個宏,名字就叫u32LogicIndex,看起來像是個“普通的”成員,其實它是stIpCfg.u32IpAddress,如上代碼。爲了使用方便,我們還定義了一個u32IntfIpAddress的宏來更直觀地表示接口IP地址。

注意,儘管這些宏是在結構內定義的,但是還是要注意其名稱的唯一性,不然與別人衝突了很可能編不過。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值