Macro invocation

R

Ron

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.
 
V

Victor Bazarov

Ron said:
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?

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.
But if I can pass any pp-token I could even pass a comma since
it's an op-or-punc pp-token, ok?

Not in the same level as the parentheses. The comma is a special token.
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.

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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,580
Members
45,055
Latest member
SlimSparkKetoACVReview

Latest Threads

Top