C语言中的“#”和“##”

开头

大家好,我叫这是我58。在今天,我们要学一下关于C语言中的###的一些知识。

1.什么是#?

#,是一个只能用于宏的符号,用来返回#后面的量的名字(可以是变量,可以是宏,枚举常量或者字面常量,表达式也是可以的,但定义宏的时候#的右变必须是宏的参数),是一个字符串,其中,如果某个宏是#A(这里的A为字面常量)这种形式的话,那么这个宏就会返回这个字面常量转换成的字符串,比如#A(这里的A11.4514),它返回的就是11.4514这个字符串,而又比如#A(这里的A为表达式1+2),它返回的是1+2这个字符串,并且还比如#A(这里的AHello, world!这个字符串),它返回的是"Hello, world!"两边都带有"的字符串,不是两边都没带"的字符串Hello, world!。这就是#,非常简单。

2.什么是##?

在这里插入图片描述
##,也是一个只能用于宏的符号,用来返回把两个符号连接成一个符号的值,其中,这个值的类型可以是浮点型,可以是整型,可以是结构体类型,甚至也可以是一个函数!总之就是什么东西都可以合成而已,并且,在某个宏里写##的时候,##的前面和后面必须有你写的符号,否则就会报错,因此,我们可以把没定义过的CSDN或者YK1BOY##合成出一个CSDNYK1BOY来,而这就是##,跟#一样非常简单。

3.###的实际应用

输出变量的名字

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#define PRINT(A) printf(#A"\n")
int main() {
	int i = 0;
	float f = 0.0f;
	unsigned int def = 0;
	PRINT(i);
	PRINT(f);
	PRINT(def);
	return 0;
}

把两个符号连接成一个符号

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#define CAT(A, B) A##B
#define E 0
#define OF 67
#define DE(A) 1.2
#define D 666
#define E(A) 678
int main() {
	int i = 1;
	int ii = 7;
	int iii = 87887;
	printf("%d\n", CAT(i, ii));
	printf("%d\n", CAT(E, OF));
	printf("%f\n", CAT(D, E(A)));
	return 0;
}

输出根据变量的表达式

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#define PRINT(A,FORMAT) printf(#A" = "FORMAT"\n", A)
int main() {
	int i = 11;
	float f = 4.5f;
	unsigned int def = 810;
	PRINT(i,"%d");
	PRINT(f,"%f");
	PRINT(def,"%u");
	return 0;
}

……

下一篇博客要说的东西

预处理指令的其中之一——#line

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值