Я столкнулся с следующим кодом в Linux (include/linux/list.h). Я запутался в строке 713. В частности, я не понимаю ({n = pos-> member.next; 1;}).Назначение фигурной скобки Использование кода C в Linux (include/linux/list.h)?
Что такое фигурные скобки? Почему в этом заявлении есть «1»?
Если кто-то может объяснить эту конкретную линию, это будет очень признательно. Обратите внимание, я не нуждается в объяснении того, как списки ссылок и #defines работы и т.д.
704 /**
705 * hlist_for_each_entry_safe - iterate over list of given type safe against removal of list entry
706 * @pos: the type * to use as a loop cursor.
707 * @n: another &struct hlist_node to use as temporary storage
708 * @head: the head for your list.
709 * @member: the name of the hlist_node within the struct.
710 */
711 #define hlist_for_each_entry_safe(pos, n, head, member) \
712 for (pos = hlist_entry_safe((head)->first, typeof(*pos), member);\
713 pos && ({ n = pos->member.next; 1; }); \
714 pos = hlist_entry_safe(n, typeof(*pos), member))
715
'({/ * code * /})' является расширением GNU, выражением оператора. Выполняется код в фигурных скобках, а значение - это значение последнего выражения внутри. –