宏参数连接不像我预期的那样工作

## macro argument concatenation not working as I expected

本文关键字:工作 参数 连接      更新时间:2023-10-16

#define MOGSH_CONCAT (x,y) x##y
#define MOGSH_DOUBLE (a,b) MOGSH_CONCAT(a,b)
#define MOGSH_DEFINEPROC (p) MOGSH_DOUBLE(_gt,p) options_dialog::p;
MOGSH_DEFINEPROC(AssignMainForm);

愉快地扩展为:

_gtAssignMainForm options_dialog::AssignMainForm;

_gt未定义,则_gtAssignMainForm为:

typedef void (__stdcall *_gtAssignMainForm)();

options_dialog只是一个类,AssignMainForm是一个静态成员。

相反,在MSVC9中,我得到错误:
'a' : undeclared identifier

放在

所在行
MOGSH_DEFINEPROC(AssignMainForm);

在类函数宏的定义中,宏名与参数列表开头的(之间不能有空格。

#define MOGSH_CONCAT(x,y) x##y 
//                  ^ no whitespace allowed here

正如您现在所拥有的(带有空格),MOGSH_CONCAT是一个类似对象的宏,具有(x,y) x##y的替换列表,这就是为什么您得到如此奇怪的结果。