gcc - 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);
可能吗?
解决方案
不,这是不可能的。
C 预处理器只执行文本替换。预处理器计算的唯一地方是 in #if 10 + 20 == 30
,但该行不执行任何替换。
推荐阅读
- entity-framework - SQL Server 2017 - EF 正在尝试访问与连接字符串不同的数据库
- javascript - 将 Promise 函数映射到数组不会持久化结果
- javascript - 在ember中将html元素的值作为参数传递
- amazon-web-services - 按距离排序查询需要读取整个数据集?
- oracle-apex - Apex 数据加载:来自 csv 文件的 2 个数字列根据条件选择 1 并加载到表中
- java - 如何使前端 angularjs 代码与同一 EC2 上的后端 java 代码通信
- python - 如何在拆分之前避免同时包含字符串和数字的行?
- javascript - Vue + Webpack - 指定服务器进行热重载
- python - 使用 [import package] 而不是 [from package import package] 设置 python
- android - Android - SharedPreferences - 根据偏好值调整代码?