use*_*475 0 c c++ casting c-preprocessor
我们的想法是创建自动脚轮,它会根据给定的前缀和数字粘贴指向变量的指针.假设你有一些不断开发的界面,所以你每隔几周就会获得一些新的结构版本.因此,您可以只使用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;
}
Run Code Online (Sandbox Code Playgroud)
我希望预处理器嵌套自己并首先粘贴d1操作,然后将d1操作的结果与第一个d2参数合并.然而它不起作用,所以我的问题是,我怎么能实现这个原因似乎是可能的.
我不确定你要做什么,但通常的问题是预处理器在它的参数中进行宏替换之前进行了标记粘贴和字符串化.所以如果你写的东西如下:
#define PASTE(a,b) a ## b
Run Code Online (Sandbox Code Playgroud)
并称之为:
#define x 123
PASTE(A,x)
Run Code Online (Sandbox Code Playgroud)
,最后一行扩展到Ax,而不是A123.要获得所需的结果,通常需要添加一个间接级别:
#define PASTEHELPER(a,b) a ## b
#define PASTE(a,b) PASTEHELPER(a,b)
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为参数的完全宏扩展PASTE将在PASTEHELPER扩展之前发生,所以在PASTE(A,x)上面,参数PASTEHELPER将是A和123.