6
我发现计算器有一天这个片段(感谢那个):gcc的预处理器和粘贴
#define PLATFORM 3
#define PASTER(x,y) x ## _ ## y
#define EVALUATOR(x,y) PASTER(x,y)
#define PLATFORMSPECIFIC(fun) EVALUATOR(fun, PLATFORM)
extern void PLATFORMSPECIFIC(somefunc)(char *x);
用gcc编译-E,它会导致:
# 1 "xx.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "xx.c"
extern void somefunc_3(char *x);
但是:
#define PLATFORM linux
#define PASTER(x,y) x ## _ ## y
#define EVALUATOR(x,y) PASTER(x,y)
#define PLATFORMSPECIFIC(fun) EVALUATOR(fun, PLATFORM)
extern void PLATFORMSPECIFIC(somefunc)(char *x);
结果于:
# 1 "xx.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "xx.c"
extern void somefunc_1(char *x);
我能做些什么来使这个返回'somefunc_linux'?顺便说一句,Clang似乎是对的。
还声明您的编译器版本。我用clang和gcc得到了相同的结果 - 因为这两种编译器都预先定义了一个'#define linux 1' – nos
啊..很好的调用。我没有检查是否预定义了linux。 – KJH
我认为在Linux上,它只是'linux',在两端都有两个下划线。我的错。 – KJH