免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4751 | 回复: 14

刚才看源码读到一个小技巧 [复制链接]

论坛徽章:
0
发表于 2010-07-13 18:52 |显示全部楼层
没想到typedef和undef的组合还有这样的效果。

  1. // file: compiz-0.9.0/include/core/core.h

  2. // X11 Bool defination breaks BOOST_FOREACH. Convert it to a typedef */
  3. #ifdef Bool
  4. typedef Bool XBool;
  5. #undef Bool
  6. typedef XBool Bool;
  7. #endif
复制代码

论坛徽章:
0
发表于 2010-07-13 19:10 |显示全部楼层
将内置类型,变成typedef? 不了解boost, 能说说 ,x11 Bool 是如何导致 breaks BOOST_FOREACH的么?
不太明白?

论坛徽章:
0
发表于 2010-07-13 19:13 |显示全部楼层
恩,的确很巧妙~

论坛徽章:
0
发表于 2010-07-13 19:53 |显示全部楼层
我认为是编译器对typedef和宏的处理时序不同,改个定义方式就解决了因为宏导致的冲突。至于BOOST_FOREACH那么复杂的展开宏,对我而言拿来用就是了,反正C++0x也有替代它的东西,以后转C++0x时它也就退入历史舞台了。

论坛徽章:
0
发表于 2010-07-13 21:32 |显示全部楼层
没想到typedef和undef的组合还有这样的效果。
没本 发表于 2010-07-13 18:52



    本兄,没看明白,解释一下呗。。

论坛徽章:
0
发表于 2010-07-13 21:36 |显示全部楼层
本帖最后由 没本 于 2010-07-13 22:08 编辑

4楼有解释啊,就是把别人在前面用#define定义的类型转成由typedef定义的一个技巧。

论坛徽章:
3
巳蛇
日期:2013-10-03 10:41:48申猴
日期:2014-07-29 16:12:04天蝎座
日期:2014-08-21 09:24:52
发表于 2010-07-14 08:37 |显示全部楼层
没明白啊本哥。
期待给小菜鸟俺解释一下。{:3_193:}

论坛徽章:
0
发表于 2010-07-14 08:48 |显示全部楼层
晕乎。。

论坛徽章:
0
发表于 2010-07-14 08:49 |显示全部楼层
4楼有解释啊,就是把别人在前面用#define定义的类型转成由typedef定义的一个技巧。
没本 发表于 2010-07-13 21:36



    这个转换有什么用?本哥需要解释一下哈

论坛徽章:
4
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:11
发表于 2010-07-14 09:02 |显示全部楼层
本帖最后由 starwing83 于 2010-07-14 09:06 编辑

在C语言里面(从行为角度上来说)应该是一样的,只是符号表里面有没有这个名儿而已,在C++里面,貌似typedef出来的和define出来的在重载解析、模版匹配方面会有区别。


UPDATE:额,做了个试验,貌似没影响啊…………不知道是怎么个break法,等待ow大大解析一下……
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

SACC2021中国系统架构师大会

【数字转型 架构重塑】2021年5月20日-22日第十三届中国系统架构师大会将在云端进行网络直播。

大会为期3天的议程,涉及20+专场,近120个主题,完整迁移到线上进行网络直播对会议组织来说绝非易事;但考虑到云端会议的直播形式可以实现全国各地技术爱好者的参与,也使ITPUB作为技术共享交流平台得到更好的普及,我们决定迎难而上。
http://sacc.it168.com/


大会官网>>
  

北京盛拓优讯信息技术有限公司. 版权所有 16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP