6

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

任何建议都会有所帮助。

提前谢谢你的帮助。

4

2 回答 2

6

正如@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;
于 2011-08-05T02:36:35.110 回答
4

这个链接:

预处理器扩展宏名称后,宏的定义主体将附加到剩余输入的前面,并继续检查宏调用。因此,宏体可以包含对其他宏的调用。

所以在你的情况下:

MY_VARIABLE_LINE被转换为int g_iLine__LINE__Var;。但是 now__LINE__不再是一个有效的令牌,并且不被视为预定义的宏。

Aditya 的代码是这样工作的:

MY_VARIABLE_LINE被转换成decl(__LINE__)哪个被转换成var(123)哪个被转换成int giLine123var = 0

编辑:这是为 GNU C

于 2011-08-05T07:38:49.150 回答