实在是不知道怎么用一句标题描述这个问题。。
场景如下:
meta.h
#define META_FUNC_NAME(META_TYPE) func_## METY_TYPE
META_FUNC_NAME(SUPPLIED_META_TYPE)() {
do_something();
}
#undef SUPPLIED_META_TYPE
test.c:
#define SUPPLIED_META_TYPE float
#include "meta.h"
#define SUPPLIED_META_TYPE double
#include "meta.h"
我希望在 test.c
得到 func_double
和 func_float
两个函数。但是,上面的代码最终会展开出两个 func_METY_TYPE
函数:
In file included from test.c:5:
meta.h:1:35: error: redefinition of ‘func_METY_TYPE’
1 | #define META_FUNC_NAME(META_TYPE) func_## METY_TYPE
| ^~~~~
meta.h:2:6: note: in expansion of macro ‘META_FUNC_NAME’
2 | void META_FUNC_NAME(SUPPLIED_META_TYPE)() {
| ^~~~~~~~~~~~~~
In file included from test.c:2:
meta.h:1:35: note: previous definition of ‘func_METY_TYPE’ was here
1 | #define META_FUNC_NAME(META_TYPE) func_## METY_TYPE
| ^~~~~
meta.h:2:6: note: in expansion of macro ‘META_FUNC_NAME’
2 | void META_FUNC_NAME(SUPPLIED_META_TYPE)() {
| ^~~~~~~~~~~~~~
请问有什么解决方案吗?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.