免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4172 | 回复: 9
打印 上一主题 下一主题

字符串连接数字的宏定义(上次没说清楚) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-22 22:18 |只看该作者 |倒序浏览
我想实现这样的功能
  int  a1,b2,c3,d4,e5

变量名是一个字符串加上一个数字
for(int i=1; i<=5; i++)
{
      //想这样赋值
       字符串i = 0;
}

而不想这样
a1 = 0;
b2 = 0;
c3 = 0;
d4 = 0;
e5 = 0;

谢谢各位了

论坛徽章:
0
2 [报告]
发表于 2009-04-22 22:46 |只看该作者
……为啥不直接用数组?
就像这样:

#define MAX 5

int a[MAX];

for (int i = 0; i < MAX; i++)
    a[i] = 0;

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:53:172015亚冠之水原三星
日期:2015-06-02 16:34:202015年亚冠纪念徽章
日期:2015-10-19 18:13:37程序设计版块每日发帖之星
日期:2015-11-08 06:20:00
3 [报告]
发表于 2009-04-22 22:54 |只看该作者
为啥楼主就是不用数组

论坛徽章:
0
4 [报告]
发表于 2009-04-22 23:09 |只看该作者
想要个实现字符串和数字连接的宏
令有它用 变量类型可以的别的

论坛徽章:
0
5 [报告]
发表于 2009-04-23 06:30 |只看该作者
宏只适宜简单玩玩,不提倡玩复杂的宏。因为影响代码的可读性。

论坛徽章:
0
6 [报告]
发表于 2009-04-23 09:26 |只看该作者
说实话,你要真想这样搞,不如用脚本
比如shell,处理这个太easy了

论坛徽章:
0
7 [报告]
发表于 2009-04-23 09:31 |只看该作者
原帖由 langue 于 2009-4-22 22:46 发表
……为啥不直接用数组?
就像这样:

#define MAX 5

int a[MAX];

for (int i = 0; i < MAX; i++)
    a = 0;

我觉得lz想要的是enum + 数组


enum {A1=0, B2, C3, D4, E5};

论坛徽章:
0
8 [报告]
发表于 2009-04-23 09:52 |只看该作者
楼主是不是想让程序可以自己根据运行的情况来动态的定义变量?
不过这样似乎超出了C语言的能力范畴了。。

不过楼主的意图可以用其它方式达到,2楼版主已经给出答案了。
可以使用动态数组:
int *a = (int*)malloc(length)

论坛徽章:
1
寅虎
日期:2014-11-30 21:25:54
9 [报告]
发表于 2009-04-23 13:37 |只看该作者
#define str(x, i) x##i

可是你的字符串和数字都有变化啊?
加同样的字符串可能这样  
for(i = 0; i < 10; i++) str(a,i) = 0;

这样就把所有 a0 a1 ... a9 都设成0了

论坛徽章:
0
10 [报告]
发表于 2009-04-23 17:03 |只看该作者

回复 #9 vbs100 的帖子

你这样没用,当即使 i 从0开始变化到9,每次str(a , i)返回的结果都是ai,而不是你想要的a0,a1,a2...
宏定义是编译预处理的,换句话说,编译器还没读入for这条语句,str( a, i )就已经被预处理器展开了。
当编译起真正要开始编译的时候,变成了这样:

  1. for(i = 0; i < 10; i++) ai = 0;
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP