# Macro invocation

Discussion in 'C++' started by Ron, Dec 1, 2003.

1. ### RonGuest

What kind of tokens can I pass as arguments? Can I pass more than one token
for a single argument? eg.

#define MYMACRO(arg1, arg2) arg1 arg2

MYMACRO("abc" L'd' .12, "def")

Is it valid? But if I can pass any pp-token I could even pass a comma since
it's an op-or-punc pp-token, ok? So i could write:

MYMACRO("abc" , L'd' .12, "def")

That is ambiguous since it's not clear if the first comma closes the first
argument or if it's just a token to pass. Please, give me an answer.

Greetings.

Ron, Dec 1, 2003

2. ### Victor BazarovGuest

Yes, since the comma is the only op-or-punc here, the first argument
is ["abc" L'd' .12] and the second is ["def"]. See 16.3/10.
Not in the same level as the parentheses. The comma is a special token.
This is not ambiguous. Each comma at the same level as parentheses
separates macro arguments. In this case given the definition of MYMACRO
as stated in your post, the error is: too many macro arguments.

If you need to pass a comma, surround the corresponding argument with
parentheses:

MYMACRO(("abc" , L'd' .12), "def")

Victor

Victor Bazarov, Dec 1, 2003