首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何与C预处理器连接两次并展开宏(如“arg ## _ ## MACRO”中的宏)?

如何与C预处理器连接两次并展开宏(如“arg ## _ ## MACRO”中的宏)?
EN

Stack Overflow用户
提问于 2018-03-27 04:25:07
回答 2查看 0关注 0票数 0

我试图编写一个程序,其中某些函数的名称依赖于某个宏变量的值,其中宏如下所示:

代码语言:txt
复制
#define VARIABLE 3
#define NAME(fun) fun ## _ ## VARIABLE

int NAME(some_function)(int a);

NAME()把它变成

代码语言:txt
复制
int some_function_VARIABLE(int a);

而不是

代码语言:txt
复制
int some_function_3(int a);

因此,这显然是错误的做法。变量的不同可能值的数目很小,所以我可以简单地执行#if VARIABLE == n然后分别列出所有的case,还有别的方法吗?

EN

Stack Overflow用户

发布于 2018-03-27 13:21:30

标准C预处理器

代码语言:txt
复制
$ cat xx.c
#define VARIABLE 3
#define PASTER(x,y) x ## _ ## y
#define EVALUATOR(x,y)  PASTER(x,y)
#define NAME(fun) EVALUATOR(fun, VARIABLE)

extern void NAME(mine)(char *x);
$ gcc -E xx.c
# 1 "xx.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "xx.c"





extern void mine_3(char *x);
$

票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100003703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档