记录自已学习之宏定义

由于编译一个C程序是需要许多步骤的,其中第一个步骤就是 预处理阶段。预处理阶段主要是用于删除备注,插入由头文件包含的文件内容,还有定义和替换被#define指令定义的符号以及确定代码的部分内容。

#define name stuff

#define MAX_QUE  50 

这个就是直接定义一个替换文本:比如说 #define MAX_QUE(最大的队列数) 50 这个就是利用宏定义来定义一个字符串替换数字。在一个c程序中反复的用到这个50,你就可以用这个宏定义来代替,比如需要修改50,你只需要造宏定义修改就行了,没必要在每个定义了50的地方一个个修改。

这篇博文说的就是有#define指令定义的内存,我们叫它宏定义。使用#define指令,你可以把任何文本替换到程序中。它还有一个机制就是能把参数替换到文本里面。

#define 名字(name)(参数列表) stuff
#define MUL(x) ((x) * (x))
#define ADD(x) ((x) + (x))

这个就是要定义一个参数列表的宏,比如说定义一个乘法的宏: #define MUL(x) ((x) * (x)) 这个宏就是定义了一个乘法。为什么里面的参数都需要括号来括起来,是因为防止出现没有按照你自已预想的次序进行求值的情况发生。比如在MUL(5)的情况下,就容易发生错误,里面的括号不加,就会造成(5 + 1 * 5 + 1) = 11, 没有得出预想的36。所以里面的括号是要添加的。#define ADD(x) ((x) + (x))  外面的括号就是如果出现了 cnt = 20 * ADD(5); 可能出现的情形就是 20 * 5 + 5 = 105,而不是200所以外面的括号是需要加的。总之就是有参数就要在每个参数上面添加括号,还有在最外边用一个括号包围他们。

关于宏定义和函数的问题
在一些简单的计算中,我们可以多用用宏定义。但在执行一些比较复杂的计算的时候就需要函数了。因为复杂的计算需要的宏定义式子比较长,而且不好定义。函数就比较容易写出来。宏定义每次在执行的时候都被插入到程序中,对于多次被调用的算还是选择函数好。但宏定义的执行速度更快,而函数需要一些输入与输出的额外开支。宏定义在用参数的时候是不需要参数的类型的,而函数就需要参数的类型。


最后还要提一下,在用宏定义的时候需要注意一下宏定义的规则,也就是宏定义大多数都用大写来定义出来,我们可以用#undef (宏定义的name)来去除一个宏定义。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值