#define 以及##

举报
游离 发表于 2023/02/02 20:12:38 2023/02/02
【摘要】 #define定义标示符#define定义标示符就是将一个名称起一个别名,在程序运行之前使用别名将原来的名字替换掉,从而达到简化代码书写的作用#define的语法define name stuffname是别名,stuff是原本的名称#define NUM 120#define STR "abcdef"int main(){ printf("%d\n", NUM + 10); printf...

#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
复制代码

欢迎点赞收藏关注,感谢大家的支持!

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。