您的位置:首页 > 其它

宏定义中#与##的用法

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

具体方法以后再学习。因为今天没有时间,哈哈。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: