浅谈宏相关内容

宏的定义

在 C 语言中,宏分为 有参数和无参数两种。无参宏的宏名后不带参数,

其定义的一般形式为:   #define 标识符 字符串

示例:

#define       M                  5              // 不带参数的宏定义:

#define       M(x)          x*x+5*x       //带参宏定义 

切记:

1、不可在后面添加分号;

2、惯例将宏名称每个字母采用大写,这有助于区分宏与一般的变量

宏的优缺点

一、优点:

1、方便程序修改:简单宏替换常量,当常量改变时,只需要改变宏,而不必整个程序去修改;

2、提高程序效率:使用带参数的宏定义可完成函数调用的功能,又能减少系统开销,提高运行效率;

二、缺点:

1、由于是直接嵌入的,所以代码可能相对多一点;

2、嵌套定义过多可能会影响程序的可读性,而且很容易出错,不容易调试;

3、对带参的宏而言,由于是直接替换,并不会检查参数是否合法,存在安全隐患;

宏函数的适用范围

1、一般来说,用宏来代表简短的表达式比较合适;

2、在考虑效率的时候,可以考虑使用宏,或者内联函数;

3、还有一些任务根本无法用函数实现,但是用宏定义却很好实现。比如参数类型没法作为参数传递给函数,但是可以把参数类型传递给带参的宏

4、常用常量,可以定义为宏;

宏与其他对比

一:宏与全局变量对比:

1、宏定义的只是一段字符,在编译期间即会使用并替换到引用的位置,在运行中是没有宏定义的概念的,不会分配内存

而全局变量要到运行时才可以,并为其分配内存;

2、宏定义不可以被赋值,即其值一旦定义不可修改,而变量在运行过程中可以被修改;

3、宏定义只有在定义所在文件或引用所在文件的其它文件中使用。 而全局变量可以在工程所有文件中使用,只要再使用前加一个声明就可以了。换句话说,宏定义不需要extern

C语言标准中宏定义的作用域是,从定义位置开始,到其当前所在作用域结束,即宏定义只属于当前这个文件,其他文件如果没有通过#include包含这个文件,那就不能使用这个宏定义。

二:宏与const 对比:

1、起作用的阶段: #define是在编译的预处理阶段起作用,而const是在 编译、运行的时候起作用;

2、起作用的方式:#define只是简单的字符串替换,宏常量没有数据类型,没有类型检查,在字符替换可能会产生意料不到的错误,而const有对应的数据类型,是要进行判断的,进行类型安全检查,可

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值