PRIZE宏名字一样。()里只是参数
高级宏定义
预处理
-文件包含
-宏定义
-条件编译
宏定义:大写字母,不是语句所以不用;结束,以#undef结束
不带参的宏定义
#define PI 3.14159
带参的宏定义
#define MAX(x, y) (((x) > (y)) ? (x) :(y))
1:把(((x) > (y)) ? (x) :(y))里的值替换成 MAX(x, y)中 x ,y 的值
2:仅仅是把 MAX(x, y) 替换为 (((x) > (y)) ? (x) :(y)) 假如 x=3, y=5 则在程序中:
printf("%d 是大数", MAX(x, y)); 宏替换后 printf("%d 是大数", 3 > 5 ? 3 : 5);
3:# 在带参数的宏定义中,#运算符后面应该跟一个参数,预处理器会把这个参数转换为一个字符串。
#define STR(s) # s
printf(STR(Hello %s num = %d\n), STR(ILove), 520);
## 是记号连接运算符,可以使用##连接两个参数
#define TOGETHER(x, y) x ## y
pritnf("%d\n", TOGETHER(5, 20)); //输出 520
4:宏可变参数
#define SHOWLIST(...) printf(#__VA_ARGS__)
#define PRINT(format, ...) printf(# format, ##__VA_ARGS__)
其中...表不使用可变参数,__VA_ARGS__在预处理中被实际的参数集所替换。S