天天看点

C/C++语言宏定义##连接符和符#的使用

C/C++语言宏定义##连接符和符#的使用 

(一)C/C++语言宏定义##连接符和符#的使用

   (1) ## 连接符:在带参数的宏定义中,

 用来将两个Token连接为一个Token

,从而形成一个新的子串。

注意这里连接的对象是Token就行,而不一定是宏的变量。

    例子:

#define XNAME(n) x ## n      

    当出现int XNAME(1) = 14;时,会被替换为:

int x1=14;      

     (2)#符:是将其后面的宏参数进行字符串化操作(Stringfication),即把宏参数变为一个字符串,简单说就是在对它所引用的宏变量 通过替换后在其左右各加上一个双引号。#符,也就是把传递过来的参数当成字符串进行替代。

    例子:

#define WARN_IF(EXP) do{ if (EXP) fprintf(stderr, "Warning: " #EXP "/n"); } while(0)      

当出现WARN_IF (divider == 0);时,相当于如下替换:

do {
  if (divider == 0)
    fprintf(stderr, "Warning" "divider == 0" "/n");
} while(0);