目录
- 开头
- 1.什么是
#
? - 2.什么是
##
? - 3.
#
和##
的实际应用 - 输出变量的名字
- 把两个符号连接成一个符号
- 输出根据变量的表达式
- ……
- 下一篇博客要说的东西
开头
大家好,我叫这是我58。在今天,我们要学一下关于C语言中的#
和##
的一些知识。
1.什么是#
?
#
,是一个只能用于宏的符号,用来返回#
后面的量的名字(可以是变量,可以是宏,枚举常量或者字面常量,表达式也是可以的,但定义宏的时候#
的右变必须是宏的参数),是一个字符串,其中,如果某个宏是#A
(这里的A
为字面常量)这种形式的话,那么这个宏就会返回这个字面常量转换成的字符串,比如#A
(这里的A
为11.4514
),它返回的就是11.4514
这个字符串,而又比如#A
(这里的A
为表达式1+2
),它返回的是1+2
这个字符串,并且还比如#A
(这里的A
为Hello, 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