我有一个在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程序-预处理程序通常可以自己调用。

10-06 04:50