如何通过宏声明变量?

Dar*_*ngs 6 c macros line declare

首先,我使用的是 MS 的 Visual Studio 和 C 语言。

最近我需要用一个类似宏的相同语句来声明变量。

但是,如您所知,我只能声明一个具有相同名称的变量。

例如,这是不可能的。

int iVar1;
int iVar1; // this is not possible. 
Run Code Online (Sandbox Code Playgroud)

所以我想到了宏包括__ LINE __,如果我可以使用这个预定义的宏,我可以通过一个宏语句声明很多变量。

但是制作起来很困难。

我做了这样的宏。

#define MY_LINE_VARIABLE        int g_iLine##__LINE__##Var = 0;
Run Code Online (Sandbox Code Playgroud)

但是在编译之后,我可以得到这个名为 'g_iLine_ LINE _Var' 而不是 'g_iLine123Var' 的变量

我想知道这是 possile,我怎样才能做到。

此外,如果可能,我需要使用__ FILE __宏。但是这个宏可能会被字符串数据改变。所以我不能确定。

任何建议都会有所帮助。

提前谢谢你的帮助。

A. *_* K. 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;
Run Code Online (Sandbox Code Playgroud)


Rum*_*kin 5

这个链接:

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

所以在你的情况下:

MY_VARIABLE_LINE被转换为int g_iLine__LINE__Var;. 但 now__LINE__不再是有效的标记,并且不被视为预定义的宏。

Aditya 的代码是这样工作的:

MY_VARIABLE_LINE被转换为decl(__LINE__)被转换为var(123)被转换为int giLine123var = 0.

编辑:这是针对 GNU C 的