目录
- 开头
- 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




















