[comp.lang.c] Macro arguments with commas

stuart@siesoft.co.uk (Stuart Hood) (04/26/91)

I have a macro:

    #define M(E) { static int v[] = E; \
		   int i; \
		   for (i=0; i<sizeof(v)/sizeof(int); i++) \
		       process(v[i]); }

so that I can go:

    M({ 23 });

I would really love to go:

    M({ 23, 27 });

but this produces "incorrect bracketing" errors from the compiler
because '{' doesn't escape the parameter in the same way that '('
does.

The only solution that I can think of is:

    #define M(E) { int i=0; \
		   for (i=0; i<sizeof(E)/sizeof(int); i++) \
		       process(v[i]); }
    ...
    static int val = { 23, 27 };
    M(val);

Can anyone think of a neater solution?  Please email;  I'll post
the best solution (with due credits, of course).

Thanks in advance,

Stuart.
-
--
S I E M E N S  Stuart Hood === Siemens Nixdorf House, Bracknell, Berks, UK
-------------  Phone: + 44-344-850994          Email: stuart@siesoft.co.uk
N I X D O R F  The trouble with everyone, is that they generalise too much