社区
C语言
帖子详情
请教此语句是啥意思,在线等待
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)); \
})
...全文
385
12
打赏
收藏
请教此语句是啥意思,在线等待
#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)); \ })
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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
打赏
举报
回复
看不懂,蹭点分!
【创新设计】(四川专用)高考语文一轮复习 第1部分 第8单元 附录
【创新设计】(四川专用)高考语文一轮复习 第1部分 第8单元 附录
嵌入式Linux GDB调试技术
嵌入式Linux GDB调试技术,实验报告
很简易windows版批处理
自制windows版批处理小工具,但愿对大家有用吧,第一次做还有很多问题多多指教!
基础模块上册试题(卷).doc
基础模块上册试题(卷).doc
论如何提高C语言教学效果.pdf
论如何提高C语言教学效果.pdf
C语言
70,026
社区成员
243,244
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章