GCC预编译宏##,与另一个宏[重复]的标记连接
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GCC预编译宏##,与另一个宏[重复]的标记连接相关的知识,希望对你有一定的参考价值。
这个问题在这里已有答案:
正如你可以看到连接令牌的工作, 还有一个令牌是另一个宏工程, 但是当一个令牌是宏时,它似乎不起作用?
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
似乎没有效果
答案
那就是为什么你需要在它工作之前提供另一个级别 - 宏参数将在传递给foo
之前进行扩展。
#define foo(x)(longNameForaFunction_##x())
#define foo1(x) foo(x)
#define three third
..
printf("%d\n",foo1(three));
以上是关于GCC预编译宏##,与另一个宏[重复]的标记连接的主要内容,如果未能解决你的问题,请参考以下文章