Разница между LIST_HEAD_INIT и INIT_LIST_HEAD

Я пытаюсь понять Linux API связанного списка ядра.

Согласно Связанному списку ядра Linux я должен инициализировать заголовок списка с помощью INIT_LIST_HEAD, но здесь (Программа ядра Linux)вместо этого предлагается использовать LIST_HEAD_INIT.

Вот рабочий код, который я написал, но я не уверен, что сделал это правильно. Может ли кто-нибудь проверить, что это нормально?

#include 
#include 
#include "list.h"

typedef struct edge_attr {
        int d;
        struct list_head list;
} edge_attributes_t;

typedef struct edge {
        int id;
        edge_attributes_t *attributes;
} edge_t;

int main () {
        int i;
        struct list_head *pos;
        edge_attributes_t *elem;
        edge_t *a = (edge_t*)malloc(sizeof(edge_t));

        a->id = 12;
        a->attributes = (edge_attributes_t*) malloc(sizeof(edge_attributes_t));

        INIT_LIST_HEAD(&a->attributes->list);

        for (i=0; i<5; ++i) {
                elem = (edge_attributes_t*)malloc(sizeof(edge_attributes_t));
                elem->d = i;
                list_add(&elem->list, &a->attributes->list);
        }

        list_for_each(pos, &(a->attributes->list)) {
                elem = list_entry(pos, edge_attributes_t, list);
                printf("%d \n", elem->d);
        }

        return 0;
}

8
задан Mateusz Piotrowski 22 August 2017 в 12:54
поделиться