【发布时间】:2013-12-05 22:35:26
【问题描述】:
我需要能够获得以下信息:
#define MY_MACRO(PARAM1,PARAM2) \
MY_OTHER_MACRO(TYPENAME_OF(PARAM1),PARAMNAME_OF(PARAM1));\
MY_OTHER_MACRO(TYPENAME_OF(PARAM2),PARAMNAME_OF(PARAM2));\
导致
MY_MACRO(int x,char *z)
编译为
MY_OTHER_MACRO(int,x);
MY_OTHER_MACRO(char*,z);
不然编译成这样就不是世界末日了:
MY_OTHER_MACRO(int,x);
MY_OTHER_MACRO(char,*z);
或者即使这样也可以:(我可以编码 MY_OTHER_MACRO 来处理任一结果)
MY_OTHER_MACRO(int,x);
MY_OTHER_MACRO(char,z);
或者,如果有某种方法可以计算由空格分隔的标记(并假设“*”是单独的标记,我也可以使用它 - 例如 2 vs 3) 据我所知,通常情况下,标记用逗号分隔。有没有办法使用另一个字符?
【问题讨论】:
-
不太可能。宏可以加入,而不是分开。
-
@zch 是的,但是他们可以加入,形成一个产生分离结果的宏的名称。
标签: c c-preprocessor variadic-macros