lnlidawei

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

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

 

posted on 2023-01-20 04:49  lnlidawei  阅读(50)  评论(0编辑  收藏  举报