The GNU C preprocessor operating in ANSI C mode adjusts appropriately for multiple use of an argument—the first use expands all the newlines, and subsequent uses of the same argument produce no newlines. But even in this mode, it can produce incorrect line numbering if arguments are used out of order, or not used at all. What follows is an example illustrating this problem.
#define ignore_second_arg(a,b,c) a; c ignore_second_arg (foo (), ignored (), syntax error);The syntax error triggered by the tokens “syntax error” results in an error message citing the line containing “ignored (),” even though the statement of “syntax error);” is the line containing the error.