c:宏的使用
一、宏的说明
1、本质: 宏的本质是字符串替换。
2、参数: 宏,可以带参数。
3、宏参数常量化(#): 宏参数,可以被转化为“常量字符串”。宏参数常量化,取消“宏的参数”的变量名、函数名、宏名等功能。实现方法:#macro_parameter_name
4、合并标识符(##): “##”,将“两个”标记合并为“一个”标记。标记,通常可以理解为变量名、函数名、宏的名字。实现方法:token1##macro_parameter_name
5、多行语句合并(\): 宏,必须是一行语句。当宏具有多行语句时,需要将多行语句合并为一行语句。在除了宏最后一行语句外,所有语句的末尾都要加上英文反斜杠(\)。
6、英文分号(;):
6.1、英文分号(;)是C语言的行尾标识符,英文分号(;)表示此语句书写完毕。
6.2、一个语句的末尾可以有多个分号,表示该语句是独立的一行。
6.3、宏中的语句结尾,和常规C语言语句的结尾相同,要加上英文分号(;)。
二、代码
1 [root@rocky c]# cat macro_test.c
2 #include <stdio.h>
3 #include <stdlib.h>
4
5
6 #define big(x,y) \
7 printf("big(x,y) := "#x" and "#y "\n");
8
9 #define msg(n)\
10 printf("token" #n " := %d\n", token##n);
11
12 #define loop(x)\
13 for(int i=0; i<(x); i++){\
14 printf("time_%d := %d\n", i, 2*i);\
15 }
16
17
18
19
20 int
21 main(int argc, char* argv[], char* envp[])
22 {
23 big(one, two);
24
25 int token34 = 80;
26 msg(34);;;;
27
28 loop(10);
29
30 return 0;
31 }
32 [root@rocky c]#
33 [root@rocky c]#
三、运行结果
1 [root@rocky c]# gcc -g -Wall -o macro_test macro_test.c && ./macro_test
2 big(x,y) := one and two
3 token34 := 80
4 time_0 := 0
5 time_1 := 2
6 time_2 := 4
7 time_3 := 6
8 time_4 := 8
9 time_5 := 10
10 time_6 := 12
11 time_7 := 14
12 time_8 := 16
13 time_9 := 18
14 [root@rocky c]#
15 [root@rocky c]#
四、参考文献:
1、C 预处理器|菜鸟教程: https://www.runoob.com/cprogramming/c-preprocessors.html
本文由 lnlidawei 原创、整理、转载,本文来自于【博客园】; 整理和转载的文章的版权归属于【原创作者】; 转载或引用时请【保留文章的来源信息】:https://www.cnblogs.com/lnlidawei/p/17062380.html