请教此语句是啥意思,在线等待

wlxin 2006-11-15 07:21:55
#define ast_test_flag(p,flag) ({ \
typeof ((p)->flags) __p = (p)->flags; \
typeof (__unsigned_int_flags_dummy) __x = 0; \
(void) (&__p == &__x); \
((p)->flags & (flag)); \
})
...全文
377 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
watermelontx 2006-11-18
  • 打赏
  • 举报
回复
宏定义,,这样定义,可读性太差,,安全方面也不好!
lockhall 2006-11-18
  • 打赏
  • 举报
回复
就是宏定义.定义中的\表示换行.
xiaonong 2006-11-16
  • 打赏
  • 举报
回复
啊,看不懂
处于崩溃中......
怎么这么悬乎呢???
wlxin 2006-11-15
  • 打赏
  • 举报
回复
木脑壳:为什么要那么定义,能说明原因不
再个
typeof ((p)->flags) __p = (p)->flags; 那个__p是啥东东,有啥用
typeof (__unsigned_int_flags_dummy) __x = 0; __x又是啥玩意
(void) (&__p == &__x); 这句话啥意思,有什么用
((p)->flags & (flag)); 这句话有什么用
alan001 2006-11-15
  • 打赏
  • 举报
回复
相当于这句:
------------
({if((p)->flags)__p=(p)->flags;if(__unsigned_int_flags_dummy)__x=0;((p)->flags&flag));})
alan001 2006-11-15
  • 打赏
  • 举报
回复
应该先了解和确定({........})的作用,

比方:

b=({a=1;a=2;});能不能编译通过......................

楼主试一试..........
一分之千 2006-11-15
  • 打赏
  • 举报
回复
#define ast_test_flag(p,flag) ({ \
typeof ((p)->flags) __p = (p)->flags; \
typeof (__unsigned_int_flags_dummy) __x = 0; \
(void) (&__p == &__x); \
((p)->flags & (flag)); \
})

这个是C语言中的预处理语句。c语言中经常会使用#define来代替一个函数的定义 在程序中任何出现ast_test_flag(p,flag)的地方都会自动被 ({ \
typeof ((p)->flags) __p = (p)->flags; \
typeof (__unsigned_int_flags_dummy) __x = 0; \
(void) (&__p == &__x); \
((p)->flags & (flag)); \
})
所替换。
在C++里可以使用内联函数来代替
alan001 2006-11-15
  • 打赏
  • 举报
回复
这句没有意义:(void) (&__p == &__x);
alan001 2006-11-15
  • 打赏
  • 举报
回复
先用 if 代替 typeof 看看编译能不能通过,,
yingge 2006-11-15
  • 打赏
  • 举报
回复
#define ast_test_flag(p,flag) ({ \
typeof ((p)->flags) __p = (p)->flags; \
typeof (__unsigned_int_flags_dummy) __x = 0; \
(void) (&__p == &__x); \
((p)->flags & (flag)); \
})

为什么这样定义宏?似乎下面这样更好些吧

#define ast_test_flag(p,flag) (do{ \
typeof ((p)->flags) __p = (p)->flags; \
typeof (__unsigned_int_flags_dummy) __x = 0; \
(void) (&__p == &__x); \
((p)->flags & (flag)); \
}while(0))
Ninstein 2006-11-15
  • 打赏
  • 举报
回复
宏 没什么高深的
\是换行符
LiChenYue 2006-11-15
  • 打赏
  • 举报
回复
看不懂,蹭点分!

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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