结构体中的宏定义

第一次看见在结构体中有宏定义,开始有点迷糊,想到该结构是如何存储的?宏定义会是不会多次编译?以下是我看的一个列子:

 struct ACL_XML {
    /* public */
    int   depth;                    /**< 最大深度 */
    int   node_cnt;                 /**< 节点总数, 包括 root 节点 */
    int   root_cnt;                 /**< 根节点个数 */
    int   attr_cnt;                 /**< 属性总数 */
    ACL_XML_NODE *root;             /**< XML 根节点 */

    /* private */
    ACL_HTABLE *id_table;           /**< id 标识符哈希表 */
    ACL_XML_NODE *curr_node;        /**< 当前正在处理的 XML 节点 */
    ACL_DBUF_POOL *dbuf;            /**< 内存池对象 */
    ACL_DBUF_POOL *dbuf_inner;      /**< 内部分布的内存池对象 */
    size_t dbuf_keep;               /**< 内存池中保留的长度 */
    size_t space;                   /**< 在创建 xml 对象时已分配的内存大小 */

    unsigned flag;                  /**< 标志位: ACL_XML_FLAG_xxx */ 

    /**< 是否允许一个 xml 文档中有多个根节点,内部缺省为允许 */
 #define    ACL_XML_FLAG_MULTI_ROOT (1 << 0)

    /**< 是否兼容单节点中没有 '/' 情况 */
 #define    ACL_XML_FLAG_IGNORE_SLASH   (1 << 1)

    /**< 是否需要对文本数据进行 xml 解码  */
 #define    ACL_XML_FLAG_XML_DECODE     (1 << 2)

    /**< 创建 xml 对象时是否需要对数据进行 xml 编码 */
 #define ACL_XML_FLAG_XML_ENCODE        (1 << 3)

    ACL_VSTRING *decode_buf;        /**< 当需要进行 xml 解码时非空 */

    /* public: for acl_iterator, 通过 acl_foreach 可以列出所有子节点 */

    /* 取迭代器头函数 */
    ACL_XML_NODE *(*iter_head)(ACL_ITER*, ACL_XML*);
    /* 取迭代器下一个函数 */
    ACL_XML_NODE *(*iter_next)(ACL_ITER*, ACL_XML*);
    /* 取迭代器尾函数 */
    ACL_XML_NODE *(*iter_tail)(ACL_ITER*, ACL_XML*);
    /* 取迭代器上一个函数 */
    ACL_XML_NODE *(*iter_prev)(ACL_ITER*, ACL_XML*);
};

在这里我们要明白的是预编译与编译两者的区别:宏定义是在预编译时就会去找到相应的常量去替换,就是在编译成目标文件之前已经进行了替换,所以这里在结构体中有宏定义不会被重复编译,也就不可能为结构体中的宏定义分配内存一说。

作用域

作用域还是开始于#define,结束于#undef,没有什么只作用于结构体之内。

作用

把宏定义放在结构体中,按我看的代码来看应该是为了更加直观,让人一看就知道改结构体中的个标志位是什么,被定义在哪一位 ,以便于运算。

原文链接

转载于:https://www.cnblogs.com/lyglj/p/6751905.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值