请教有没有技巧在宏中展开变量的值
#define MARCO(x, y) x.##y
如果直接使用上面的宏
MARCO(a, b)
//a为一结构体名称,b为一变量名,char b[24] = "abc";
则会生成a.b,而我想让b展开,生成一个a.abc,
请问大家有没有什么变通的方法没有??
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
![扫码二维码加入Web技术交流群](/public/img/jiaqun_03.jpg)
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
回复 1# 独孤九贱
如果是变量,做不到。预处理器(编译器也做不到)根本就不知道变量的值是什么。如果是常量,把它定义成宏,预处理器就可以搞定。
这个我知道,所以我问的是“有没有什么变通的技巧……”
在一个项目里,需要用类似的技巧来实现以下功能:
hash表中有若干的“name=>value”的“关键字-值”对,现在需要循环遍历该表,将name对应的值,赋给结构体的相应的成员。结构体的成员名称跟表中的name相同。
如果手动赋值,或者是为每一个hash表(这样的hash表有上百个)再维护一个“名称--结构体成员”的列表,工作量巨大。所以才来请教一下大家。![](https://www.wenjiangs.com/wp-content/uploads/chinaunix/202207/em02.gif)
去掉“##”
复制代码
复制代码
如果反其道而行之,gcc有没有扩展的方法,可以取得结构体每个变量的字符串名称,也可以……![](https://www.wenjiangs.com/wp-content/uploads/chinaunix/202207/luya.gif)
本帖最后由 freebarque 于 2011-05-10 10:55 编辑
哈,同问,有没办法, 让“abc”进去, abc出来
把一个字符串里面的内容,可以转变成一个变量名
回复 5# 独孤九贱
呵呵
看错了哈,变量好像的确不行。
哈哈,九贱大神的帖子,顶一个
变量的值是运行时才决定的,编译的时候都是未知的,怎么能展的开?
能想到的比较简单的方法就是写个转换函数
复制代码结构体复杂的话可以用个脚本来自动生成代码,也不是很麻烦。
再建一张表
名字->地址