进阶--宏的定义

本文详细解释了宏的原理,包括宏的声明方式、替换规则,以及常用宏定义如常量和函数的区别。特别强调了使用括号和#与##符号的作用。
摘要由CSDN通过智能技术生成

1.什么是宏?


        宏可以看作为一些命令的集合。它是一种预处理器指令,在预编译阶段将宏名替换为后面的替换体。

        而#define可以用来定义宏:

        #define 机制包括了一个规定,允许把参数替换到文本中,这种实现通常称为宏(macro)或定义宏(define macro)。

        宏的声明方式:


   

        我们执行下面这段代码:       


        他的实际执行结构为6+1*6+1->即为13

        这说明了什么?这印证了上面所说的宏是把参数替换到文本中,也就是宏直接吧6+1替换掉了x直接带入了后面的表达式当中了!

        对此,根据我们原来的用意。这时我们可以用括号来解决这个问题:


        这给了我们一个提醒:我们在用宏时最好多用括号,以此来避免不必要的错误!

#define的替换规则:


        在程序中扩展#define 定义符号和宏时,需要涉及几个步骤:
1. 在调用宏时,首先对参数进行检查,看看是否包含任何由 #define 定义的符号。如果是,它们首先被替换。
2. 替换文本随后被插入到程序中原来文本的位置。对于宏,参数名被他们的值所替换。
3. 最后,再次对结果文件进行扫描,看看它是否包含任何由 #define 定义的符号。如果是,就重复上 述处理过程。
        注意:
1. 宏参数和 #define 定义中可以出现其他 #define 定义的符号。但是对于宏,不能出现递归。
2. 当预处理器搜索 #define 定义的符号的时候,字符串常量的内容并不被搜索。

2.常用的宏定义


1、宏定义常量


         定义诸如:字符串、整形数、浮点型数等等的常量.

        举例:

2.宏定义函数


        宏可以接受参数,类似于真正的函数一样。具体的接受参数方法与函数差不多,只不过不用指定函数类型,这也是宏定义函数的一个优势!比如:当我定义了一个函数有时要传整形,有时要传浮点型,函数可能要根据类型来多定义几个,而宏只需要一个就行了!

      举例:


       

   再举例:


        这个例子中,函数是做不到跟宏相同的效果的,所以说为啥有了函数我们还要定义宏呢?这个就是一个很明显的例子。

宏与函数的对比

3.#和## 分别字符串化和将两个符号连接成一个符号 


#字符串化
        这个很好理解看看例子就会了!

        举例:


      

 ##将两个符号连接成一个符号
        ##可以把位于它两边的符号合成一个符号。 它允许宏定义从分离的文本片段创建标识符。

        举例:


       

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值