宏定义中#与##的用法

来源:互联网 发布:mac电脑中病毒怎么杀毒 编辑:程序博客网 时间:2024/04/30 05:03
 

 宏定义中#的功能是将其后面的宏参数进行字符串化操作(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,也就是变参宏。

具体方法以后再学习。因为今天没有时间,哈哈。