cpp bug/feature
George Entenman
ge at mcnc.UUCP
Wed Feb 8 23:39:55 AEST 1984
I believe that the following behavior of the C preprocessor should be
considered to be a bug, or at least that it should be changed unless it
serves some useful function.
I wrote a file with the following five lines:
# define LINE A, B, C, D
# define LISTPARMS( i, j, k, l ) ( a = (i), b = (j), c = (k), d = (l) )
line LINE
listparms LISTPARMS(A,B,C,D);
listparms LISTPARMS( LINE );
In my opinion, BOTH calls to LISTPARMS should produce the same output.
However, if you run this file through the C preprocessor (pipe it
through /lib/cpp, for example) you will get the following output:
line A, B, C, D
listparms ( a = (A), b = (B), c = (C), d = (D) );
listparms ( a = ( A, B, C, D ), b = (), c = (), d = () );
The last line will also produce the error message:
filename: lineno: LISTPARMS: argument mismatch
The problem is that the proprocessor decides that
listparms LISTPARMS( LINE );
has only one parameter BEFORE it expands the LINE macro.
LINE expands as the string "A, B, C, D", which is then
substituted into LISTPARMS as its first parameter.
I believe that this is a bug and not a feature. Has anyone
fixed this bug in cpp? If so, could you send me the changes?
While I'm on the topic of cpp, I would like to second the recent
suggestion made by Robert Berlinger that cpp be modified so that macros
would be able to accept a variable number of arguments.
George Entenman
The Microelectronics Center of North Carolina
...decvax!mcnc!ge
By the way, I used m4, which doesn't have this bug/feature, to write
the macros that I needed.
More information about the Comp.lang.c
mailing list