首页 > 解决方案 > c预处理器:连接中的算术

问题描述

我怎样才能让预处理器在连接中进行算术运算?
我试过:

#define DECL_FUNCT3(ch1, ch2) \
        void funct_ ## ch1 ## _and_ ## ch2 ## _(void);

#define DECL_FUNCT2(ch1, ch2) DECL_FUNCT3(ch1, ch2)
#define DECL_FUNCT1(ch1, ch2) DECL_FUNCT2(ch1, ch2)
#define DECL_FUNCT(ch) DECL_FUNCT1(ch, ch+16)

DECL_FUNCT(0)
DECL_FUNCT(1)

我想得到:

void funct_0_and_16_(void);
void funct_1_and_17_(void);

但我得到的是:

$ gcc -E test.c 
[...]
void funct_0_and_0+16_(void);
void funct_1_and_1+16_(void);

可能吗?

标签: gccconcatenationc-preprocessor

解决方案


不,这是不可能的。

C 预处理器只执行文本替换。预处理器计算的唯一地方是 in #if 10 + 20 == 30,但该行不执行任何替换。


推荐阅读