Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Token Pasting Confusion

Tags:

c

macros

all

My codes like this:

#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

but gcc warning:

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

So I think GCC preprocess ##table into table, actually I want

TTP_ROUTE_TABLE_ENTRY_INC(ipv4_host)

will be translate into this:

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

So I don't know what's wrong with my codes. Thank you for your help.

like image 944
batmancn Avatar asked Mar 13 '23 13:03

batmancn


1 Answers

You need another set of # after the argument table:

ttp_route_##table##_inc(void)

The same goes for other lines containing table.

like image 67
2501 Avatar answered Mar 23 '23 04:03

2501