C语言的宏
宏是一个字符串替换的工具,再编译之前,预处理阶段完成。
以#define起始的行为宏的定义。
宏中出现的几个特殊符号
- ## 字符串拼接
- # 符号转换为双引号包含的字符串
- ... 变参展开
预处理前
#define MAX 1024
#define max(x, y) {(x) > (y) ? (x) : (y); MAX; MIN}
#define MIN 0
#define kh_destroy(name, h) kh_destroy_##name(h)
#define DEBUG_VALUE(v) printf(#v"is equal to %d.\n",v)
#define myprintf(templt,...) fprintf(stderr,templt,__VA_ARGS__)
#define myprintf2(templt,args...) fprintf(stderr,templt,args)
int x = MAX;
int y = max(3, 8);
kh_destroy(int, h);
DEBUG_VALUE(y);
myprintf("%d%s", x, "h");
myprintf2("%d%s!", x, "h");
预处理命令
gcc -E macro.c -o macro.i
预处理后
# 1 "macro.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "macro.c"
# 12 "macro.c"
int x = 1024;
int y = {(3) > (8) ? (3) : (8); 1024; 0};
kh_destroy_int(h);
printf("y""is equal to %d.\n",y);
fprintf(stderr,"%d%s",x, "h");
fprintf(stderr,"%d%s!",x, "h");
网友评论