免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2419 | 回复: 2

一个关于define展开的古怪问题 [复制链接]

论坛徽章:
0
发表于 2009-04-17 15:23 |显示全部楼层
代码里面有如下定义:

  1. #define TYPE_1     0x0001
  2. #define TYPE_2     0x0002
  3. #define TYPE_3     0x0004
  4. ......
  5. #define TYPE(n)    TYPE_##n
  6. ......
  7. #define XXXTYPE   1
  8. #define YYYTYPE    2
  9. #define ZZZTYPE   3
  10. ......
复制代码

我想达到的效果是, TYPE(XXXTYPE) 能够展开得到 0x0001 (也即是TYPE_1)
但是在 TYPE 这个宏中, ##会阻止XXXTYPE的展开, 先将 token 组合成了 TYPE_XXXTYPE.
有什么办法能够让 XXXTYPE 先展开得到 1, 再将 token 组合成 TYPE_1 呢?

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
发表于 2009-04-17 15:48 |显示全部楼层
简单的说, 你需要这样:
#define TYPE(n)    TYPE_(n)
#define TYPE_(n) TYPE_##n

那么,
TYPE(1212)
最终会被扩展为
TYPE_1212

#define a_macro_identifier 326
TYPE(a_macro_identifier)
最终将会被扩展为
TYPE_326

是你想要的效果吧?


参考:
http://www.cppblog.com/ownwaterl ... _with_paramter.html

论坛徽章:
0
发表于 2009-04-17 16:18 |显示全部楼层

回复 #2 OwnWaterloo 的帖子

啊哈~ 非常感谢, 原来还有这么一手......
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP