我在C中定义了一个像这样的宏:
#define SOME_FIELD(_A_,_B_,_C_) \
MyObj[ ## _A_ ## ].somePTR = \
(DWORD_PTR) (buff_ ## _C_ ## _C_ ## _ ## _B_ ## );
Run Code Online (Sandbox Code Playgroud)
我能理解的是,对于索引A,我们得到了一些"somePTR"的值.我的问题是,有什么## <name> ##表示法,以及如何计算somePTR的值?
我是这样一个宏的新手,所以描述性的解释会非常有用.
这称为标记连接.它允许您将参数粘合在一起.
对于您的示例,SOME_FIELD(Param1,Param2,Param3);展开如下:
MyObj[Param1].somePTR = (DWORD_PTR) (buff_Param3Param3_Param2);
Run Code Online (Sandbox Code Playgroud)
通过使用编译器的预处理器,您可以轻松地自行尝试.您通常不需要编写完全成熟的C程序 - 预处理器通常可以自己调用.