宏定义中的#
#的功能是将其后面的宏参数进行 字符串化操作,简单说就是替换后在其左右各加上一个双引号。
比如下面代码中的宏:
#define PRINT(EXP) printf("str:" #EXP "/n")
例如,
PRINT(aaa)
实际使用被替换为
print("str:" "aaa" "/n");
宏定义中的##
##被称为 连接符,用来将两个Token连接为一个Token。注意这里连接的对象是Token就行,而不一定 是宏的变量。
例如:
#define LINK_MULTIPLE(a,b,c,d) a##_##b##_##c##_##d
那么,下面语句
LINK_MULTIPLE(name,company,position,salary);
将展开为:
name_company_position_salary