define定义标示符
define定义标示符就是将一个名称起一个别名,在程序运行之前使用别名将原来的名字替换掉,从而达到简化代码书写的作用
define的语法
define name stuff
name是别名,stuff是原本的名称
define NUM 120
define STR "abcdef"
int main()
{
printf("%d\n", NUM + 10);
printf("%s", STR);
return 0;
}
复制代码
image-20220409213341935
其实#define就是将NUM 和 STR 简单的进行了转换,再进行计算即可
define也可以将复杂的符号进行简单的替换
define reg register //将register改名为reg
int main()
{
//register int a = 0;// 定义一个寄存器变量a
reg int a = 0;
return 0;
}
复制代码
注意:#define 后面最好不要加上分号,避免不必要的错误
define定义宏
宏的声明方式
define name( parament-list ) stuff
其中的parament-list 是一个由逗号隔开的符号表,它们可能出现在stuff中。
define只是进行了简单的替换,并不会进行运算
define ADD(x) x+x
define MUL(x) x*x
int main()
{
int ret = ADD(2);
printf("%d\n", ret1);
int ret2 = MUL(3);
printf("%d\n", ret2);
int ret3 = MUL(2 + 3);
printf("%d\n", ret3);
return 0;
}
复制代码
ret1 的结果就是2+2=4
ret2的结果就是3*3=9
ret3的结果是11,为什么不是25?就是因为#define不会进行运算,只是简单的替换,所以是2+3*2+3=11
要是想要得到25就要加上括号,严格规定优先级顺序
define MUL(x) (x)*(x)
int main()
{
int ret3 = MUL(2 + 3);
printf("%d\n", ret3);
return 0;
}
复制代码
使用#define宏定义时,如果不注意就会发生错误,所以在宏定义的时候要多加括号,严格规定优先级的顺序
和 ##的作用
是将字符拼接在字符串中
define PRINT(n,format) printf("the value of "#n" is "#format"",n)
int main()
{
int a = 10;
PRINT(a, "%d");
return 0;
}
复制代码
是将两边的符号连接起来,成为一个符号
define TYPE(class,num) class##num
int main()
{
int class105 = 100;
printf("%d", TYPE(class, 105));
}
//打印结果就是100