CPP warning while compiling linux-kernel-2.4, correct?

Franz Sirl Franz.Sirl-kernel@lauterbach.com
Mon Nov 13 14:26:00 GMT 2000


On Monday 13 November 2000 23:09, Zack Weinberg wrote:
> On Mon, Nov 13, 2000 at 10:36:45PM +0100, Franz Sirl wrote:
> > Hi,
> >
> > this has come up earlier already, but I couldn't find a final answer. If
> > I preprocess the following testcase with current CVS:
>
> ...
>
> > #define dfprintk(fac,args...)  do { ifdebug( fac ) printk( ## args ); }
>
> ...
>
> > kernel-cpp-warning.c:12:1: warning: pasting "(" and "KERN_WARNING" does
> > not
> >
> >
> > Are these warnings correct? If yes, is removing the ## in dfprintk the
> > right solution?
>
> Yes and yes.  This is a classic example of superstitious use of ##.
> It has never been necessary in this context.  Probably someone thought
> that you had to put ## before a varargs name, because it is commonly
> used there to delete a preceding comma.
>
> The other lines which use ## use it correctly.
>
> > #define dprintk(args...)        dfprintk( FACILITY , ## args )
> > #define ifdebug(fac)           if (rpc_debug & RPCDBG_##fac)
>
> In dprintk, the effect is to delete the preceding comma if you ever
> call dprintk with no arguments.  In ifdebug, the effect is to paste
> RPCDBG_ together with the 'fac' argument.

Ah, thanks for the explanation, I'll send a patch to linux-kernel fixing this 
and other CPP warnings.

Franz.


More information about the Gcc-bugs mailing list