использование имени члена в определении макроса - PullRequest
0 голосов
/ 13 октября 2019

Я разрабатываю приложение пользовательского пространства, которое использует linux / list.h в качестве одного из заголовков. Однако, я столкнулся с проблемой, когда я использую это определение макроса "list_for_each_entry" из list.h в моем собственном приложении:

#define list_for_each_entry(pos, head, member)              \
for (pos = list_first_entry(head, typeof(*pos), member);    \
     &pos->member != (head);                    \
     pos = list_next_entry(pos, member))

static void *slob_alloc(size_t size){
  struct slob_page *sp;
  struct list_head *slob_list;

  list_for_each_entry(sp, slob_list, list) {  //The location where error is reported.
  //Something else ...
  }
}

Определения slob_page приведены ниже:

struct slob_page {
union {
    struct {
        slob_t *free;       
        struct list_head list;  /* the member accessed by that macro expansion */
    };
    struct page page;
};

};

Компилятор выдал ошибку «ошибка: использование необъявленного идентификатора« список »;». Похоже, он не смог распознать список как имя участника.

Как я могу решить эту проблему?

1 Ответ

0 голосов
/ 14 октября 2019

Не рекомендуется использовать макрос для определения такой сложной вещи. Используйте функцию вместо этого будет лучше.

...