#:构串操作符只能修饰带参数的宏的形参,它将实参的字符序列(而不是实参代表的值)转换成字符串常量。例如:
#define STRING(x)#x #x #x
#define TEXT(x)"class" #x"Info"
那么宏引用:
int abc = 100;
STRING(abc);
TEXT(abc);
展开后的结果分别为:
”abcabcabc“
"classabcInfo"
##:合并操作符将出现在其左右的字符序列合并成一个新的标识符,例如:
#define CLASS_NAME(name)class##name
#define MERGE(x,y)x##y##x
则宏引用:
CLASS_NAME(SysTimer)
MERGE(me,To)
将分别扩展为如下两个标识符:
classSysTimer
meTome
提示:使用合并操作符##时,产生的标识符必须预先有定义,否则编译器会报”标识符未定义”的编译错误。