Chinaunix
标题:
问一个预处理问题,怎么动态生成变量名
[打印本页]
作者:
deadlylight
时间:
2009-02-18 18:36
标题:
问一个预处理问题,怎么动态生成变量名
#
define
setname
(
name
)
test
#
#
name
int
setname
(
1
)
=
1
;
int
setname
(
5
)
=
2
;
#
define
var 8
int
setname
(
var
)
=
0
;
这样搞了之后,我本来是想要 int test8 = 0;
但事实上是 int testvar = 0;
有没有办法得到我要的结果呢?
作者:
langue
时间:
2009-02-18 18:40
不能直接 setname(
8
)?
作者:
deadlylight
时间:
2009-02-18 18:51
标题:
回复 #2 langue 的帖子
是啊,var的值是另外一个.h里面define的
我也在想实在没办法只能把8写在这里了
这样的话define var 就没有意义了
作者:
OwnWaterloo
时间:
2009-02-18 22:09
#include <stdio.h>
#define SET_NAME(name) SET_NAME_1(name)
#define SET_NAME_1(name) SET_NAME_2(name)
#define SET_NAME_2(name) test##name
int main()
{
int SET_NAME(1212) = 1212;
#define VAR 326
int SET_NAME(VAR) = 326;
#undef VAR
#define VAR 86
int SET_NAME(VAR) = 86;
#undef VAR
printf("%d %d %d\n",test1212,test326,test86);
return 0;
}
复制代码
作者:
flashdriver
时间:
2009-02-18 23:01
楼上能解释一下为什么要#define SET_NAME(name) SET_NAME_1(name) 这样呢? 为什么不这样转一下就没法让VAR预编译成define的值?
作者:
OwnWaterloo
时间:
2009-02-19 00:20
http://www.cppblog.com/ownwaterl ... _with_paramter.html
作者:
flashdriver
时间:
2009-02-19 01:53
多谢楼上
我试了一下,少用一个define 也行
#include <stdio.h>
#define SET_NAME(name) SET_NAME_2(name)
//#define SET_NAME_1(name) SET_NAME_2(name)
#define SET_NAME_2(name) test##name
int main()
{
int SET_NAME(1212) = 1212;
#define VAR 326
int SET_NAME(VAR) = 326;
#undef VAR
#define VAR 86
int SET_NAME(VAR) = 86;
#undef VAR
printf("%d %d %d\n",test1212,test326,test86);
return 0;
}
作者:
OwnWaterloo
时间:
2009-02-19 02:42
标题:
回复 #7 flashdriver 的帖子
嗯, 确实是我弄错了。
通常的3个是因为有一个用做隐藏__LINE__
比如
#define CONNECTION(text1,text2) text1##text2
#define CONTECT(text1,text2) CONNECTION(text1,text2)
int CONNECT(test,1212) = 1212; // int test1212 = 1212;
#define VAR 326
int CONNECT(test,VAR) = 326; // int test326 = 326;
#undef VAR
#define VAR 86
int CONNECT(test,VAR) = 86; // int test86 = 86;
#undef VAR
int CONNECT(test,__LINE__) = __LINE__; // int testXXX = XXX;
为了方便的自动命名,出现第3个宏
#define CONNECT_BY_LINE(text) CONNECT(text,__LINE__)
int CONNECT_BY_LINE(test) = __LINE__; // int testYYY = YYY;
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2