我有一个在C中定义的宏,如下所示:
#define SOME_FIELD(_A_,_B_,_C_) \
MyObj[ ## _A_ ## ].somePTR = \
(DWORD_PTR) (buff_ ## _C_ ## _C_ ## _ ## _B_ ## );
我能理解的是,对于索引A,我们正在为“somePTR”获得一些值(value)。我的问题是,
## <name> ##
表示法是什么,并以此来计算somePTR的值?我是这样一个宏的新手,所以描述性解释将非常有帮助。
最佳答案
那就是token concatenation。它使您可以将参数粘合在一起。
对于您的示例,SOME_FIELD(Param1,Param2,Param3);
扩展如下:
MyObj[Param1].somePTR = (DWORD_PTR) (buff_Param3Param3_Param2);
通过使用编译器的预处理器,您很容易尝试一下。通常,您无需费心编写完整的C程序-预处理程序通常可以自己调用。