下面代码是ACL库中的一个示例
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*);
};
作用
把宏定义放在结构体中,主要目的是方便阅读,提升代码的可读性。从语法层面上来看并没有什么特别含义。