首先,我正在使用MS的Visual Studio并使用C语言。
最近我需要声明变量只有一个相同的语句,它喜欢宏。
但是如你所知,我只能声明一个具有相同名称的变量。
例如,这是不可能的。int iVar1;
int iVar1; // this is not possible.
所以我想到宏包括 __ LINE __ ,如果我可以使用这个预定义的宏,我可以通过一个宏语句声明很多变量。
但很难做到。
我像这样做了宏。
#define MY_LINE_VARIABLE int g_iLine##__LINE__##Var = 0;
但是在编译之后,我可以得到名为'g_iLine_ LINE _Var'而不是'g_iLine123Var'的变量
我想知道这是可能的,我怎么能做到。
此外,如果可能,我需要使用 __ FILE __ 宏。但是这个宏可能会被字符串数据更改。所以我不能确定。
任何建议都会有所帮助。
提前感谢您的帮助。
答案 0 :(得分:4)
正如@Chris Lutz正确地说的那样,可能有更好的方法来实现你想要的。考虑询问你想要达到的目标。
但如果你只是好奇,这就是做法:
#define var(z) int g_iLine##z##var = 0
#define decl(x) var(x)
#define MY_LINE_VARIABLE decl(__LINE__)
MY_LINE_VARIABLE;
MY_LINE_VARIABLE;
答案 1 :(得分:2)
来自this链接:
预处理器扩展宏名称后,宏的定义 将body添加到剩余输入的前面,并进行检查 对于宏调用继续。因此,宏体可以包含调用 到其他宏。
所以在你的情况下:
MY_VARIABLE_LINE
已转换为int g_iLine__LINE__Var;
。但现在__LINE__
不再是有效的令牌,不会被视为预定义的宏。
Aditya的代码就像这样:
MY_VARIABLE_LINE
转换为decl(__LINE__)
,转换为var(123)
,转换为int giLine123var = 0
。
编辑:这是针对GNU C