Функциональный синтаксис вызова макросов - PullRequest
0 голосов
/ 30 апреля 2020

Я нашел приведенный ниже код в очень старом вопросе о связанных списках ("https://stackoverfloquestions/522010/how-do-i-build-a-onetwothree-linked-list-with-a-minimum-number-of-assignment-opew.com/"), и что меня смутило, была не сама часть связанного списка, а способ определения этого макроса , Поскольку я не очень знаком с C, мне интересно, сможет ли кто-нибудь помочь мне разобрать это утверждение #deifine и, возможно, покажет мне альтернативные решения для аналогичного результата. Заранее спасибо за внимание!

#define build_list(...) \
    _build_list((sizeof((int []){ __VA_ARGS__ }))/(sizeof(int)), \
    (int []){ __VA_ARGS__ })

struct node * _build_list(size_t count, int values[count])
{
    struct node * next = NULL;

    for(size_t i = count; i--; )
    {
        struct node * current = malloc(sizeof *current);

        *current = (struct node){ values[i], next };
        next = current;
    }

    return next;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...