What does a double hash (##) in a macro mean?

后端 未结 2 1011
灰色年华
灰色年华 2021-01-17 11:45

In the below code, what does the ## do?

 #define MAKE_TYPE(myname) \\
 typedef int myname ## Id; \\
相关标签:
2条回答
  • 2021-01-17 12:18

    The ## in a macro is concatenation. Here, MAKE_TYPE(test) will expand to : typedef int testId.

    From 16.3.3 (The ## operator) :

    For both object-like and function-like macro invocations, before the replacement list is reexamined for more macro names to replace, each instance of a ## preprocessing token in the replacement list (not from an argument) is deleted and the preceding preprocessing token is concatenated with the following preprocessing token

    0 讨论(0)
  • 2021-01-17 12:19

    icecrime is correct, but something important to point out in the definition is that the tokens need to be valid preprocessing tokens. Examples:

    #define CONCAT(a,b) a ## b
    CONCAT(ClassyClass, <int>); // bad, <int> is not a valid preprocessing token
    CONCAT(Symbol, __LINE__); // valid as both are valid tokens
    
    0 讨论(0)
提交回复
热议问题