令牌混淆

bat*_*ncn 4 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
Run Code Online (Sandbox Code Playgroud)

但是gcc警告:

lib/ttp-route-table.c:130:1: error: redefinition of 'ttp_route_table_inc'
Run Code Online (Sandbox Code Playgroud)

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

TTP_ROUTE_TABLE_ENTRY_INC(ipv4_host)
Run Code Online (Sandbox Code Playgroud)

将翻译成这个:

static inline void  \
ttp_route_ipv4_host_inc(void)   \
{   \
    cur_l3_ipv4_host_table_entries++;   \
}
Run Code Online (Sandbox Code Playgroud)

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

250*_*501 7

你需要#在论证之后的另一组table:

ttp_route_##table##_inc(void)
Run Code Online (Sandbox Code Playgroud)

包含其他行的情况也是如此table.