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);