宏定义中#的功能是将其后面的宏参数进行字符串化操作(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);
ok,讲##了,连接符(concatenator),用来将两个Token连接为一个Token,例子出发:
#define LINK_MULTIPLE(a,b,c,d) a##_##b##_##c##_##d
使用typedef struct _record_type LINK_MULTIPLE(name,company,position,salary);
这里这个语句将展开为:
typedef struct _record_type name_company_position_salary;
...在C宏中称为Variadic Macro,也就是变参宏。
具体方法以后再学习。因为今天没有时间,哈哈。