C++宏定义中的特殊符号

1. #:在宏展开的时候会将#后面的参数替换成字符串,如:

#define ToString(x) #x

那么 char *str = ToString(123); 结果str="123";

'#'是`stringize'的意思。其后的变量将被用双引号包括的字符串替代。例:   
  #define   display(x)   show((long)(x),   #x)   
  则display(abs(-5));   将被替换为:show((long)(abs(-5)),   "abs(-5)");   注意有引号。
 

 

2. ##:将前后两个的单词拼接在一起,如:

#define cat(x,y) x##y

那么 int n = cat(52, 123); 结果 n =52123;

'##'是'token-paste'操作符。其后的变量将被与之前的字符串合并在一起形成一个新的token.例:   
  #define   printvar(x)   printf("%d\n",   variable##x)   
  则printvar(3);将被替换为printf("%d\n",   variable3);     
  ##仅仅合并字符串,而形成一个token,没有引号.

 

3. #@:将值序列变为一个字符

#define ToChars(c) #@c

调用ch(a)展开后成为'a'.

你可能感兴趣的:(C++)