rfc: macros accepting constructors
Kai Henningsen
kaih@khms.westfalen.de
Thu Jun 27 03:09:00 GMT 2002
aldyh@redhat.com (Aldy Hernandez) wrote on 26.06.02 in <20020626074154.GA810@redhat.com>:
> iso C stipulates that macros accepting arguments are grouped only by
> parentheses. so the code below, will fail because we think foo()
> is receiving 4 arguments instead of 1.
>
> #define foo(x) bar((x))
>
> foo((vector int){0, 1, 2, 3});
>
> main a.c:7:31: macro "foo" passed 4 arguments, but takes just 1
>
> the interesting thing is that this does not only affect vectors, but
> arrays, structures, and other aggregate types. since ANSI C allows
> for library functions to be macros, any such macros will fail if we
> pass aggregates as above.
It also hits Objective-C method calls (in square brackets) if they take
variadic parameters (and thus use commas):
foo([NSString stringWithFormat: @"bla=%s", bla]);
> the cleanest solution i can think of is modifying the preprocessor to
> allow grouping with curlies as well. can anyone think of a better
> solution?
The problem, of course, is that this breaks code who actually uses
prameters with unbalanced curlies or brackets. I'm pretty certain such
code exists.
MfG Kai
More information about the Gcc
mailing list