The C99 standard document has the following example in the section related to the ## preprocessing operator:
In the following fragment:
#define hash_hash # ## # #define mkstr(a) # a #define in_between(a) mkstr(a) #define join(c, d) in_between(c hash_hash d) char p[] = join(x, y); // equivalent to // char p[] = "x ## y";The expansion produces, at various stages:
join(x, y) in_between(x hash_hash y) in_between(x ## y) mkstr(x ## y) "x ## y"In other words, expanding hash_hash produces a new token, consisting of two adjacent sharp signs, but this new token is not the ## operator.
I don't understand why the substitution of hash_hash produces ## and not "##" or "#""#". What role开发者_开发问答 are the single hashes before and after the double hash playing?
Any responses greatly appreciated.
The ## in # ## # acts like an escape sequence in this expression. It concatenates the leftmost and the rightmost # to finally produce the token ##. Simply defining the macro as ## would cause an error since the concatenation operator expects two operands.
加载中,请稍侯......
精彩评论