문제

Glib의 이중 연결 목록 구조 인 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)
도움이 되었습니까?

해결책

그러한 매크로가 없습니다.

나는 보통 a를 사용합니다 for 작업이 15 줄 이상에 걸쳐 있지 않는 한, 예시와 마찬가지로,이 경우 일반적으로 설명 이름을 가진 추가 기능이 대안보다 읽기 쉬운 것으로 나타났습니다.

당신이 깨닫지 못하는 것은 당신이 반드시 자신의 foreach 기능을 작성할 필요는 없다는 것입니다.

g_list_foreach(list, (GFunc)g_free, NULL);

목록에있는 각 항목을 해방하며, 자주 사용하는 작업입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top