我如何通过宏声明变量?

时间:2011-08-05 02:23:08

标签: c macros line declare

首先,我正在使用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 __ 宏。但是这个宏可能会被字符串数据更改。所以我不能确定。

任何建议都会有所帮助。

提前感谢您的帮助。

2 个答案:

答案 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