#define宏定义的优点和缺点
1、宏定义的优点:
(1) 方便程序的修改
使用简单宏定义可用宏代替一个在程序中经常使用的常量,这样在将该常量改变时,不用对整个程序进行修改,只修改宏定义的字符串即可,而且当常量比较长时,我们可以用较短的有意义的标识符来写程序,这样更方便一些。
(2) 提高程序的运行效率
使用带参数的宏定义可完成函数调用的功能,又能减少系统开销,提高运行效率。正如C语言中所讲,函数的使用可以使程序更加模块化,便于组织,而且可重复利用,但在发生函数调用时,需要保留调用函数的现场,以便子函数执行结束后能返回继续执行,同样在子函数执行完后要恢复调用函数的现场,这都需要一定的时间,如果子函数执行的操作比较多,这种转换时间开销可以忽略,但如果子函数完成的功能比较少,甚至于只完成一点操作,如一个乘法语句的操作,则这部分转换开销就相对较大了,但使用带参数的宏定义就不会出现这个问题,因为它是在预处理阶段即进行了宏展开,在执行时不需要转换,即在当地执行。宏定义可完成简单的操作,但复杂的操作还是要由函数调用来完成,而且宏定义所占用的目标代码空间相对较大。所以在使用时要依据具体情况来决定是否使用宏定义。
2、宏定义的缺点:
宏定义有一些缺点:
(1) 无法对宏定义中的变量进行类型检查
此缺点,是相对于const变量来说的
[define与const的区别的简单总结]
define定义的变量,是Compile-Time时期的变量,系统在编译时候,就将其全部替换,而不会对其变量进行类型等属性检查,相对不是很安全,可能存在潜在的问题,而没有发现.
正因为其仅仅是编译时期替换,所以其定义的变量,是不会在运行时候分配内存的,不占用内存空间.
const定义的变量,是 Run-Time时期的变量,如果类型不匹配,系统在运行时候,就会发现并提示或报错,对应的,const变量在运行时期,也是一种变量,系统会为其分配内存.
(2) 边界效应
A. 未加括号带来的边界效应
由于宏定义的时候,其各个分量未加括号,而在使用宏定义的时候,传递的参数是变量的表达式,然后经过系统展开后,由于优先级的原因,导致其结果不是你所希望的.
相关文章
- ruby中顶层定义的方法究竟放在哪里?
- 在Python中定义和使用抽象类的方法
- Product - 产品经理 - 定义
- (C++)已知String类的定义,实现其函数体
- 【Android Gradle 插件】Gradle 扩展属性 ② ( 定义在根目录 build.gradle 中的扩展属性 | 使用 rootProject.扩展属性名访问 | 扩展属性示例 )
- 自己定义Application的未捕获异常处理
- Drupal 自己定义主题实体 Theming Custom Entities
- 定义一个结构体指针需要分配存储空间
- 嵌入式linux开发,C/C++跨平台开发,宏定义,条件编译区分windows和linux
- Python 实现类似PHP的strip_tags功能,并能够定义他们自己的一套保留标记
- 利用 Excel 写 C51 的宏定义
- IOC关注服务(或应用程序部件)是如何定义的以及他们应该如何定位他们依赖的其它服务
- msata、mini pcie 、pcie x4接口引脚定义及原理图方案设计
- 〖Python全栈白宝书-免费版㉛〗- 函数的定义与使用
- Go 方法定义与使用