enum给整数命名,typedef给类型命名,宏给一切重命名
本质:单纯的替换
写法
#define x y
常量宏
#define ONE 1// one替换成1
#define TWO 1+2*5//宏不进行任何计算,直接把1+2*5替换
#define PRINTF printf("%d %d\n", ONE,TWO);//PRINTF替换成后面的
//一般用大写定义
int main(void)
{
PRINTF
//printf("%d\n", ONE);
//printf("%d\n", two);
system("pause");
return 0;
}
也可以
#define PRINTF printf("%d %d\n", ONE//PRINTF替换成后面的
int main(void)
{
PRINTF,TWO);//一样可以执行
system("pause");
return 0;
}
本质就是替换
定义空宏
#define THREE
int main(void)
{
THREE
system("pause");
return 0;
}
宏也可以当宏的本体
#define ONE 1
#define ONEONE ONE
为了严谨应该在定义时候加括号#define THREE (1+1)
#define THREE 1+1
int main(void)
{
printf("%d", 2 * THREE);//2*1+1=3
参数宏
#define PRINTF(x) printf("%d\n",x);//被替换成printf("%d\n",x);
#define SUM(x,y) ((x)+(y))//一定要加括号
#define MUL(x,y) (x)*(y)
int main(void)
{
PRINTF(12);
printf("%d\n",SUM(2,8)*3);
printf("%d", MUL(2, 8));
system("pause");
return 0;
}
找最大
#define MYMAX(x,y) ((x)>(y)?x:y)
int main(void)
{
printf("%d\n", MYMAX(3,5));
system("pause");
return 0;
}
特殊符号
\,
拼接作用
#define THREE printf("asd")\
printf("qwe");
#作用:把传进来的东西解释成字符串
#define NUM(x) #x
##作用:字符串拼接
#define ONE(x,y) #x ## #y
printf("%s",ONE(123,qwe));
输出123qwe