请教一个比较难写的宏定义

haoyuenan 2011-07-14 03:25:10
假如我想定义一个宏,这个宏要实现如下功能:

假如我的程序中有10个变量,变量名字分别为rtd1, rtd2, ... , rtd10;
我想用宏的方式操作这10个变量来简少代码量;
我本来把宏定义为
#define RTD(NUM) rtd##NUM = a*b

但是我在用的时候,由于rtd的索引是一个变量,比如index,那么我这样调用宏 RTD(index);
结果编译的时候总是报错,看起来是因为宏定义里没办法识别变量?那么这个宏应该怎么定义才好?
...全文
109 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
liufang421 2011-07-14
  • 打赏
  • 举报
回复
再定义10个宏

#define RTD(NUM) RTD_##NUM

#define RTD_1 rtd1 = a*b
...
hai040 2011-07-14
  • 打赏
  • 举报
回复
定义个指针数组,指向那几个变量
AnYidan 2011-07-14
  • 打赏
  • 举报
回复
以拙胜巧
至善者善之敌 2011-07-14
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zmlovelx 的回复:]
宏是预编译时期展开的, 你来个变量index是不行的,除非它也能在预编译时期被识别。
[/Quote]

++1
赵4老师 2011-07-14
  • 打赏
  • 举报
回复
code generation
haoyuenan 2011-07-14
  • 打赏
  • 举报
回复
感谢各位的回复,俺知道了,看来只能老老实实的写代码了。
vrace 2011-07-14
  • 打赏
  • 举报
回复
那就只有一行一行 ctrl-c ctrl-v 了。。。

要不然..

xxx *rdt[10];
rdt[0] = &rdt1;
rdt[1] = &rdt2;
。。。

然后

#define RDT(NUM) *rdt[NUM] = a * b

...
WOBUGUAN 2011-07-14
  • 打赏
  • 举报
回复
可以写一个脚本自动生成你的C文件

#!/bin/bash
for var in 1,2,3,4,5,6,7,8,9,10
do
echo "RTD($var);" >> my_c_file.c
done
帅得不敢出门 2011-07-14
  • 打赏
  • 举报
回复
宏是预编译时期展开的, 你来个变量index是不行的,除非它也能在预编译时期被识别。
haoyuenan 2011-07-14
  • 打赏
  • 举报
回复
回楼上的,这是历史遗留问题了,因为前面的人已经定义成那样了,我们考虑到尽量做小的改动的原则,所以才~~~
vrace 2011-07-14
  • 打赏
  • 举报
回复
你为什么不把变量定义成 xxx rtd[10];

69,372

社区成员

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

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