Macro invocation

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

  1. Ron

    Ron Guest

    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.

    Ron, Dec 1, 2003
    1. Advertisements

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

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

    Victor Bazarov, Dec 1, 2003
    1. Advertisements

  3. Ron

    Ron Guest

    Ron, Dec 1, 2003
    1. Advertisements

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 (here). After that, you can post your question and our members will help you out.