宏定义中#与##的用法
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,也就是变参宏。
具体方法以后再学习。因为今天没有时间,哈哈。
#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,也就是变参宏。
具体方法以后再学习。因为今天没有时间,哈哈。
相关文章推荐
- C语言:宏定义的#和##用法
- C/C++常用宏定义,注意事项,宏中#和##的用法 .
- C语言学习11:typedef和define区别,头文件的使用以及 <>和“”区别,宏定义中#和##的用法,条件编译,gcc和c99中宏定义使用printf和sprintf,条件编译避免头文件包含
- C/C++常用宏定义,注意事项,宏中#和##的用法
- 关于宏定义中#与##的用法
- C/C++常用宏定义,注意事项,宏中#和##的用法
- C语言宏定义中#与##的用法
- C/C++常用宏定义,注意事项,宏中#和##的用法
- C语言中##和#的用法
- 宏定义中的#和##
- C语言之#define用法(宏定义命令)
- C宏定义#和##的用法
- 宏定义中的#和##
- 宏定义中的## 和#
- c/c++宏定义的基本用法
- C语言宏定义时#(井号)和##(双井号)的用法
- 宏定义中的##操作符和... and _ _VA_ARGS_ _
- C语言宏定义时#(井号)和##(双井号)的用法1
- C语言宏中#和##的用法
- 宏定义中的##