私は 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 関数を提供していることに気付きましたが、コールバックの間接化により、特にコールバックが 1 回しか使用されない場合、コードが読みにくくなることがよくあります。
更新: 標準のマクロがないため、他の人に役立つ場合に備えて、使用しているマクロをここに入れます。修正/改善は大歓迎です。
#define GFOREACH(item, list) for(GList *__glist = list; __glist && (item = __glist->data, true); __glist = __glist->next)