这个想法是创建自动施法者,它会根据给定的前缀和数字粘贴指向变量的指针。 假设你有一些不断开发的界面,所以你每隔几周就会获得一些新的结构版本。因此,您可以只使用SOME_DEFINE(thisStructure,version),而不是编写明确的“(structure1 *),(structure2 *)”等等;这将处理案件
我认为这可以解决问题
#define d1(x) x
#define d2(x,y) x##y
void someFunction()
{
int temp = 3;
d2(myStructure,d1(temp)) *thisStruct;
}
我希望预处理器能够嵌套自己并首先粘贴d1操作,然后将d1操作的结果与第一个d2参数合并。然而它不起作用,所以我的问题是,我怎么能实现这个原因似乎是可能的。
答案 0 :(得分:5)
我不确定你要做什么,但通常的问题 这是预处理器进行令牌粘贴和字符串化 在它的参数中进行宏替换之前。所以,如果你写 类似的东西:
#define PASTE(a,b) a ## b
并称之为:
#define x 123
PASTE(A,x)
,最后一行扩展为Ax
,而不是A123
。获得所需
结果,通常需要添加一个间接级别:
#define PASTEHELPER(a,b) a ## b
#define PASTE(a,b) PASTEHELPER(a,b)
这是有效的,因为PASTE
的参数的完全宏扩展将会
在PASTEHELPER
展开之前发生,所以在PASTE(A,x)
,上面,
PASTEHELPER
的参数将为A
和123
。
答案 1 :(得分:2)
#define d2(x,y) x ## y
void someFunction()
{
int temp = 3;
d2(myStructure,temp) *thisStruct;
}
预处理器将其转换为:
void someFunction()
{
int temp = 3;
myStructuretemp *thisStruct;
}
如果你想要替换那里的'3',那么你得到myStructure3,那么你不能用预处理器做到这一点 - 它对C / C ++变量或它们的值一无所知。