【发布时间】:2011-08-09 21:37:06
【问题描述】:
不应该这样吗:
#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);
【问题讨论】:
-
删除定义中宏名称和
(arguments)之间的空格?这使它在 gcc 中对我有用,但我没有要测试的 MSVC。 -
终于找到了:? c++ space free language 的可能副本。不能怪你没找到。
-
哈利路亚,兄弟们,它有效! :D,谢谢安迪成为第一!
标签: c++ macros concatenation c-preprocessor