URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 5379
[ Назад ]

Исходное сообщение
"linux/list.h"

Отправлено rr , 01-Май-06 08:25 
Приветствую.

В include/linux/list.h сорцов ядра встретил такую конструкцию:

#define LIST_HEAD_INIT(name) { &(name), &(name) }

Полагаю, то что в { .. } это расширение gcc? По какому слову искать в info gcc?

Спасибо.


Содержание

Сообщения в этом обсуждении
"linux/list.h"
Отправлено DeadMustdie , 01-Май-06 12:02 
>В include/linux/list.h сорцов ядра встретил такую конструкцию:
>
>#define LIST_HEAD_INIT(name) { &(name), &(name) }
>
>Полагаю, то что в { .. } это расширение gcc? По какому
>слову искать в info gcc?

Нормальная сишная конструкция. Никакое не расширение. На место макроса
будет подставлено дословно '{ &(аргумент), &(аргумент) }'.


"linux/list.h"
Отправлено DeadMustdie , 01-Май-06 12:03 
>Нормальная сишная конструкция. Никакое не расширение. На место макроса
>будет подставлено дословно '{ &(аргумент), &(аргумент) }'.

Хочу добавить порцию ворчания. Дети, изучение исходников ядра - далеко
не лучший способ изучения синтаксиса языка. Честное слово.


"linux/list.h"
Отправлено rr , 02-Май-06 09:18 
>Нормальная сишная конструкция. Никакое не расширение. На место макроса
>будет подставлено дословно '{ &(аргумент), &(аргумент) }'.
все верно :)
поторопился с вопросом

"linux/list.h"
Отправлено Skiff , 02-Май-06 04:12 
> Полагаю, то что в { .. } это расширение gcc?

Макрос LIST_HEAD_INIT(name) используется для инициализации структуры list_head,
объявленной в linux/list.h:

struct list_head {
        struct list_head *next, *prev;
};

Конструкция

struct list_head name = LIST_HEAD_INIT(name);

означает

struct list_head name = {&name, &name};

то есть

struct list_head name;
name.prev = &name;
name.next = &name;