正如你可以看到连接令牌的工作,
还有一个令牌是另一个宏工作,
但是当一个令牌是宏时,它似乎不起作用?
longNameForaFunction_one(){return 1;}
longNameForaFunction_two(){return 2;}
longNameForaFunction_third(){return 3;}
two(){return 2;}
#define bar two
#define foo(x)(longNameForaFunction_##x())
#define three third
main(){
printf("%d\n",foo(one)); // 1
printf("%d\n",foo(two)); // 2
printf("%d\n",bar()); // 2
// printf("%d\n",foo(three)); // this doesn't work
}
如果取消注释,最后一行会出现此错误;
对`longNameForaFunction_three'的未定义引用
#define three third
似乎无效
答案 0 :(得分:1)
这就是为什么你需要在它工作之前提供另一个级别的原因 - 宏参数将在传递给foo
之前进行扩展。
#define foo(x)(longNameForaFunction_##x())
#define foo1(x) foo(x)
#define three third
..
printf("%d\n",foo1(three));