C宏里面代码什么意思(附代码)//安全遍历#define list_for_each_safe(cur,tmp,list) \for (cur = (list)->head.next,\tmp = (cur)->next; \cur = &(list)->head; \cur = tmp,tmp = (tmp)->next)list_for_each_safe(cur,tmp,dlist) {dlist->del(cur);
来源:学生作业帮助网 编辑:作业帮 时间:2024/06/23 19:54:02
![C宏里面代码什么意思(附代码)//安全遍历#define list_for_each_safe(cur,tmp,list) \for (cur = (list)->head.next,\tmp = (cur)->next; \cur = &(list)->head; \cur = tmp,tmp = (tmp)->next)list_for_each_safe(cur,tmp,dlist) {dlist->del(cur);](/uploads/image/z/8190200-56-0.jpg?t=C%E5%AE%8F%E9%87%8C%E9%9D%A2%E4%BB%A3%E7%A0%81%E4%BB%80%E4%B9%88%E6%84%8F%E6%80%9D%EF%BC%88%E9%99%84%E4%BB%A3%E7%A0%81%EF%BC%89%2F%2F%E5%AE%89%E5%85%A8%E9%81%8D%E5%8E%86%23define+list_for_each_safe%28cur%2Ctmp%2Clist%29+%5Cfor+%28cur+%3D+%28list%29-%3Ehead.next%2C%5Ctmp+%3D+%28cur%29-%3Enext%3B+%5Ccur+%3D+%26%28list%29-%3Ehead%3B+%5Ccur+%3D+tmp%2Ctmp+%3D+%28tmp%29-%3Enext%29list_for_each_safe%28cur%2Ctmp%2Cdlist%29+%7Bdlist-%3Edel%28cur%29%3B)
C宏里面代码什么意思(附代码)//安全遍历#define list_for_each_safe(cur,tmp,list) \for (cur = (list)->head.next,\tmp = (cur)->next; \cur = &(list)->head; \cur = tmp,tmp = (tmp)->next)list_for_each_safe(cur,tmp,dlist) {dlist->del(cur);
C宏里面代码什么意思(附代码)
//安全遍历
#define list_for_each_safe(cur,tmp,list) \
for (cur = (list)->head.next,\
tmp = (cur)->next; \
cur = &(list)->head; \
cur = tmp,tmp = (tmp)->next)
list_for_each_safe(cur,tmp,dlist) {
dlist->del(cur);
}
为什么宏里面的方法重写了,
C宏里面代码什么意思(附代码)//安全遍历#define list_for_each_safe(cur,tmp,list) \for (cur = (list)->head.next,\tmp = (cur)->next; \cur = &(list)->head; \cur = tmp,tmp = (tmp)->next)list_for_each_safe(cur,tmp,dlist) {dlist->del(cur);
#define list_for_each_safe(cur, tmp, list) \
for (cur = (list)->head.next, \
tmp = (cur)->next; \
cur != &(list)->head; \
cur = tmp, tmp = (tmp)->next)
上面这些是宏代码,
下面这些是调用这个宏.
list_for_each_safe(cur, tmp, dlist) {
dlist->del(cur);
}
再说说宏代码吧:
\ 是个连接符,由于宏定义基本是在同一行的,但是有些代码比较长,在同一行定义看起来很别扭,所以加了个 \ 就可以换行了,所以 \ 相当于换行符.
这个 list_for_each_safe(cur, tmp, list) 看起来像个函数吧,你也可以看成函数,差不多意思.
for (cur = (list)->head.next, \
tmp = (cur)->next; \
cur != &(list)->head; \
cur = tmp, tmp = (tmp)->next)
上面这一堆就是个for循环的条件表达式,类似于 for(i=0;i