关于宏的一个问题

selooloo 2009-11-22 04:52:37
#include <stdio.h>
#define f(x) y##x
int main(void)
{
int n=5,y5=32;
printf("%d",f(5));
//printf("%d",f(n));
getchar();
return 0;
}


我想实现的功能是f(x)带入变量的值 printf("%d",f(n));只是把y和n连在一起,并没有把n换成5;
哪位高手能用宏实现这个功能啊
...全文
177 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
liangyonglou 2009-11-23
  • 打赏
  • 举报
回复
关注中......
selooloo 2009-11-23
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 wensheng_zh2007 的回复:]
楼主是不是想通过这种方式要得到y5这个变量?
[/Quote]
是的啊。。
ropert911 2009-11-23
  • 打赏
  • 举报
回复
个人觉得无解
jzd8000 2009-11-23
  • 打赏
  • 举报
回复
我在vc6.0下试了一下你的程序,可以通过啊!
BuleRiver 2009-11-23
  • 打赏
  • 举报
回复
写错了,8L是高手
BuleRiver 2009-11-23
  • 打赏
  • 举报
回复
5L是高手!!!
wensheng_zh2007 2009-11-22
  • 打赏
  • 举报
回复
楼主是不是想通过这种方式要得到y5这个变量?
飞天御剑流 2009-11-22
  • 打赏
  • 举报
回复
[Quote=引用楼主 selooloo 的回复:]
C/C++ code#include<stdio.h>#define f(x) y##xint main(void)
{int n=5,y5=32;
printf("%d",f(5));//printf("%d",f(n)); getchar();return0;
}

我想实现的功能是f(x)带入变量的值 printf("%d",f(n));只是把y和n连在一起,并没有把n换成5;
哪位高手能用宏实现这个功能啊
[/Quote]

你这个想法用宏是无法实现的。因为从对象n转换成5的过程是一个左值转换,是从左值转换成右值的过程,这是对象的性质,宏是没有这样的转换的。宏只能实现如下的转换:

#define n 5
#define f(x) g(x)
#define g(x) y##x

f(n)----->将替换成y5
liuy572 2009-11-22
  • 打赏
  • 举报
回复
个人觉得楼主想的有些过于理想
qwqwqw408 2009-11-22
  • 打赏
  • 举报
回复
宏只是简单的字符替换而已,实现不了你想要的功能
stardust20 2009-11-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 stardust20 的回复:]
#include <stdio.h>
#define paster( n ) printf( "token " #n" = %d\n ", token##n )
int main()
{
int token9=10;
paster(9);
return 0;
}

[/Quote]
看错了。。不好意思
guan323333 2009-11-22
  • 打赏
  • 举报
回复
看不懂
z0203153008 2009-11-22
  • 打赏
  • 举报
回复
只是替换成了yn而不是y5
stardust20 2009-11-22
  • 打赏
  • 举报
回复
#include <stdio.h>
#define paster( n ) printf( "token " #n" = %d\n ", token##n )
int main()
{
int token9=10;
paster(9);
return 0;
}
aizibion 2009-11-22
  • 打赏
  • 举报
回复
貌似无解,待高手

69,373

社区成员

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

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