问题描述
以下代码用于列表操作。但是我无法理解。
有人可以为我解释代码吗?
/ *
*列表定义。
* /
#define LIST_HEAD(名称,类型)
struct name {
type * lh_first ; / *第一个元素* /
}
#define LIST_ENTRY(类型)
struct {
type * le_next ; / *下一个元素* /
类型** le_prev; / *上一个下一个元素的地址* /
}
问题:
为什么结构没有名字?
列表是否为双向列表?
/ *
*列表功能。
* /
#define LIST_INIT(头){
(头) - > lh_first = NULL;
}
#define LIST_INSERT_AFTER(listelm,elm,field){
if(((elm) - > field.le_next =(listelm) - > field.le_next)!= NULL)
(listelm) - > field.le_next-> field.le_prev =
&(elm) - > field.le_next;
(listelm) - > field.le_next =(elm);
(elm) - > field.le_prev =&(listelm) - > field.le_next;
}
问题:
什么是listelm,elm,field?
#定义LIST_INSERT_HEAD(head,elm,field){
if(((elm) - > field.le_next =(head) - > lh_first)!= NULL)
(头) - > lh_first-> field.le_prev =
&(elm) - > field.le_next;
(头) - > lh_first =(elm);
(elm) - > field.le_prev =&(head) - > lh_first;
}
问题:
如果榆树成为头,最后一句话的目的是什么:
(elm) - > field.le_prev =&(head) - > lh_first;
提前致谢。
Jack
The following code is for list operation. But I can not understand.
Could anyone explain the code for me?
/*
* List definitions.
*/
#define LIST_HEAD(name, type)
struct name {
type *lh_first; /* first element */
}
#define LIST_ENTRY(type)
struct {
type *le_next; /* next element */
type **le_prev; /* address of previous next element */
}
Questions:
Why the struct does not have a name?
Is the list a two-way list?
/*
* List functions.
*/
#define LIST_INIT(head) {
(head)->lh_first = NULL;
}
#define LIST_INSERT_AFTER(listelm, elm, field) {
if (((elm)->field.le_next = (listelm)->field.le_next) != NULL)
(listelm)->field.le_next->field.le_prev =
&(elm)->field.le_next;
(listelm)->field.le_next = (elm);
(elm)->field.le_prev = &(listelm)->field.le_next;
}
Question:
What is listelm, elm, field?
#define LIST_INSERT_HEAD(head, elm, field) {
if (((elm)->field.le_next = (head)->lh_first) != NULL)
(head)->lh_first->field.le_prev =
&(elm)->field.le_next;
(head)->lh_first = (elm);
(elm)->field.le_prev = &(head)->lh_first;
}
Question:
If elm becomes head, what''s the purpose of the last sentence:
(elm)->field.le_prev = &(head)->lh_first;
Thanks in advance.
Jack
推荐答案
如何使用函数,以便我们可以看到参数的类型
是?如果可能的话,发一个可编译的例子。
HTH,
雅克。
How about using functions so we can see what the types of the arguments
are? If possible, post a compileable example.
HTH,
Jacques.
这是对C ++代码的一次尝试/>
基本编程。它甚至在语法上都不正确。搜索
代表含义在这样的代码是没用的;仅评估语法。
It''s an attempt at C++ code written by someone probably learning
basic programming. It''s not even syntactically correct. Searching
for "meaning" in such code is useless; evaluate on syntax only.
杰克,这真是一个难题。作为一个真正的C ++粉丝我希望你实际上不会使用这样的垃圾,除非你必须这样做! (提示:标准::列表)
无论如何,我对这一点很不确定但可能使用如下:
struct fred_node
{
LIST_ENTRY(struct fred_node)节点;
Fred fred; // Fred是一些任意类型 - 这是Freds的列表
};
转换为:
struct fred_node
{
struct {
struct fred_node * le_next; / * next element * /
struct fred_node ** le_prev; / *上一个下一个元素的地址* /
}节点;
Fred fred; // Fred是一些任意类型 - 这是Freds的列表
};
这定义了节点类型。然后列出清单:
LIST_HEAD(fred_head,struct fred_node)fredlist;
LIST_INIT(fredlist);
相当于:
struct fred_head {
struct fred_node * lh_first; / *第一个元素* /
} fredlist;
fredlist-> lh_first = NULL;
现在添加一个节点:
struct fred_node * new_node =(struct fred_node *)malloc(sizeof(struct
fred_node));
new_node.fred =弗雷德(21); //无论是什么意思
LIST_INSERT_HEAD(mylist,new_node,node);
扩展为
struct fred_node * new_node =(struct fred_node *)malloc(sizeof(struct
fred_node));
new_node.fred = Fred(21); //无论是什么意思
if((new_node-> node.le_next =(fredlist) - > lh_first)!= NULL)
fredlist-> lh_first- > node.le_prev =& new_node-> node.le_next;
fredlist-> lh_first = new_node;
new_node-> node.le_prev =& new_node;
现在添加另一个节点:
struct fred_node * newer_node =(struct fred_node *)malloc(sizeof(struct
)
fred_node));
newer_node.fred = Fred(-33); //无论是什么意思
LIST_INSERT_AFTER(newer_node,new_node,node);
扩展为:
struct fred_node * newer_node =(struct fred_node *)malloc(sizeof(struct
fred_node));
newer_node.fred = Fred(-33); //无论是什么意思
if((new_node-> node.le_next = newer_node-> node.le_next)!= NULL)
newer_node-> node。 le_next-> node.le_prev =& new_node-> node.le_next;
newer_node-> node.le_next = new_node;
new_node-> node。 le_prev =& new_node;
嗯,这就是我想出来的。我没有测试任何东西。祝你好运。
-
Cy
这篇关于谁能为我解释代码?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!