我试图编写一个程序,其中某些函数的名称依赖于某个宏变量的值,其中宏如下所示:
#define VARIABLE 3
#define NAME(fun) fun ## _ ## VARIABLE
int NAME(some_function)(int a);
宏NAME()
把它变成
int some_function_VARIABLE(int a);
而不是
int some_function_3(int a);
因此,这显然是错误的做法。变量的不同可能值的数目很小,所以我可以简单地执行#if VARIABLE == n
然后分别列出所有的case,还有别的方法吗?
发布于 2018-03-27 13:21:30
$ 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);
$
发布于 2018-03-27 14:01:10
#define VARIABLE 3
#define NAME2(fun,suffix) fun ## _ ## suffix
#define NAME1(fun,suffix) NAME2(fun,suffix)
#define NAME(fun) NAME1(fun,VARIABLE)
int NAME(some_function)(int a);
https://stackoverflow.com/questions/-100003703
复制相似问题