gcc error: warning: pasting "syn" and ")" does not give a valid preprocessing token

Kiet Tran ktran@extremenetworks.com
Wed Jul 4 15:10:00 GMT 2001


Hi Alexandre;

Thanks for the suggestion. I was able to get my code to
compile now.
However, I had to do a work around as in the following
statement:

#define TCP_EXTERN(state) \
extern pspec_t * state##_rcv_rst(tcb_t *,pspec_t *), \
* state##_rcv_syn(tcb_t *,pspec_t *), \
* state##_rcv_ack(tcb_t *,pspec_t *), \
* state##_rcv_fin(tcb_t *,pspec_t *), \
* state##_snd_rst(tcb_t *,pspec_t *), \
* state##_snd_syn(tcb_t *,pspec_t *), \
* state##_snd_ack(tcb_t *,pspec_t *), \
* state##_snd_fin(tcb_t *,pspec_t *)

My original define is as in the following:

#define TCP_EXTERN(state) \
extern pspec_t *##state##_rcv_rst(tcb_t *,pspec_t *), \
....

I removed the leading '##' pair and found that the
passing parameter of the macro was not replacing
'state' word. The preprocessor replaced the 'state'
parameter after I insert a space between the '*' character
and 'state##' word. Is this a real bug in the preprocessor?

Regards,
Kiet




More information about the Gcc-bugs mailing list