c - token 粘贴困惑

标签 c macros

全部

我的代码是这样的:

#define TTP_ROUTE_TABLE_ENTRY_INC(table)    \
static inline void  \
ttp_route_##table_inc(void)   \
{   \
    cur_l3_##table_table_entries++;   \
}
TTP_ROUTE_TABLE_ENTRY_INC(ipv4_host)
TTP_ROUTE_TABLE_ENTRY_INC(ipv4_route)
TTP_ROUTE_TABLE_ENTRY_INC(ipv6_host)
TTP_ROUTE_TABLE_ENTRY_INC(ipv6_route)
#undef TTP_ROUTE_TABLE_ENTRY_INC

但是 gcc 警告:

lib/ttp-route-table.c:130:1: error: redefinition of 'ttp_route_table_inc'

所以我认为GCC将##table预处理成表,实际上我想要

TTP_ROUTE_TABLE_ENTRY_INC(ipv4_host)

将被翻译成这样:

static inline void  \
ttp_route_ipv4_host_inc(void)   \
{   \
    cur_l3_ipv4_host_table_entries++;   \
}

所以我不知道我的代码有什么问题。感谢您的帮助。

最佳答案

在参数 table 之后你需要另一组 #:

ttp_route_##table##_inc(void)

其他包含 table 的行也是如此。

关于c - token 粘贴困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36765165/

相关文章:

c - beanstalkd C 客户端库

c - 如何在c :中打印此结构体的字段 "cell -> pos"的所有值

c - 使用 scanf 时无限循环

c++ - 为什么只有一个参数的宏除了双括号外不能按预期工作?

c - 为什么使用宏 #define FREE_ARG char* 来分配由 malloc 分配的空闲内存(数值配方)

c++ - 解析/调试/移植带有大量宏的 C++ 程序

c - 为什么这个 scanf() 转换实际上有效?

c - 汇编寄存器算术?

c++ - 如何使用宏在 C++ 中生成随机变量名称?

C 宏将函数名称与预定义的名称列表进行比较