list_for_each_entry在keil下编译出错

cokeliu 2009-12-30 06:17:01
我将linux下一个程序移植到Keil for arm下. 遇到一个郁闷的问题就是在linux下一个宏
/**
* list_for_each_entry - iterate over list of given type
* @pos: the type * to use as a loop cursor.
* @head: the head for your list.
* @member: the name of the list_struct within the struct.
*/
#define list_for_each_entry(pos, head, member)\
for (pos = list_entry((head)->next, typeof(*pos), member);\
prefetch(pos->member.next), &pos->member != (head); \
pos = list_entry(pos->member.next, typeof(*pos), member))


#define list_entry(ptr, type, member) \
container_of(ptr, type, member)
#define container_of(obj, type, memb) \
((type *)(((char *)obj) - offset_of(type, memb)))
#define offset_of(type, memb) \
((unsigned long)(&((type *)0)->memb))

我在keil下用这个宏怎么写都出错. 即使我将嵌套的宏化简化成单独一个宏编译还是说类型匹配出错.
有没有这个函数的详细资料.
...全文
192 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
cokeliu 2009-12-31
  • 打赏
  • 举报
回复
prefetch(pos->member.next), 已经被我删除了.因为他只是预取指令作用. 并未对程序功能造成影响.
帅得不敢出门 2009-12-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 deep_pro 的回复:]
list_for_each_entry 用到了gcc的一个特性
能通过结构体里的一个元素得到结构体本身的首地址
最重要的是typeof ,这个是gcc的扩展

linux内核依赖gcc的特性,我只听说过似乎intel的编译器能编译linux内核
[/Quote]
上面的containerof宏 就是啊 问题不在这
prefetch(pos->member.next), 这个预取指令 可能就是问题所在
deep_pro 2009-12-30
  • 打赏
  • 举报
回复
list_for_each_entry 用到了gcc的一个特性
能通过结构体里的一个元素得到结构体本身的首地址
最重要的是typeof ,这个是gcc的扩展

linux内核依赖gcc的特性,我只听说过似乎intel的编译器能编译linux内核

steptodream 2009-12-30
  • 打赏
  • 举报
回复
菜鸟帮顶

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧