我正在使用GLib的双向链表,GList.我想知道是否有任何标准的宏迭代GList.我在GLib文档中找不到任何这样的东西.结果我做了自己的宏,但如果存在,我宁愿使用标准的东西.
说明这个问题:通常我写了很多代码,看起来像这样:
GList *list,*elem; MyType *item; for(elem = list; elem; elem = elem->next) { item = elem->data; /* do something with item */ }
有一个宏可以减少到
GList *list; MyType *item; GFOREACH(item,list) { /* do something with item */ }
哪个更嘈杂
注意:我意识到GLib提供了一个foreach函数来迭代一个列表,并为每个元素调用一个回调函数,但通常间接的回调使代码更难阅读,特别是如果回调只使用一次.
更新:看到,因为没有标准的宏,我正在使用这个宏,以防其他人有任何用处.欢迎更正/改进.
#define GFOREACH(item,list) for(GList *__glist = list; __glist && (item = __glist->data,true); __glist = __glist->next)