#define和const的区别

转载自:https://blog.csdn.net/yi_ming_he/article/details/70405364

角度1: 

就定义常量说的话: 
const 定义的常数是变量 也带类型, #define 定义的只是个常数 不带类型。

角度2: 
就起作用的阶段而言: 
define是在编译的预处理阶段起作用,而const是在 编译、运行的时候起作用。

角度3: 
就起作用的方式而言: 
define只是简单的字符串替换,没有类型检查。而const有对应的数据类型,是要进行判断的,可以避免一些低级的错误。 
正因为define只是简单的字符串替换会导致边界效应,具体举例可以参考下面代码:

#define N 2+3 //我们预想的N值是5,我们这样使用N
double a = N/2;  //我们预想的a的值是2.5,可实际上a的值是3.5
  • 1
  • 2

角度4: 
就空间占用而言: 
例如:

#define PI 3.14     //预处理后 占用代码段空间
const float PI=3.14;    //本质上还是一个 float,占用数据段空间
  • 1
  • 2

角度5: 
从代码调试的方便程度而言: 
const常量可以进行调试的,define是不能进行调试的,因为在预编译阶段就已经替换掉了

角度6: 
从是否可以再定义的角度而言: 
const不足的地方,是与生俱来的,const不能重定义,而#define可以通过#undef取消某个符号的定义,再重新定义。

角度7: 
从某些特殊功能而言: 
define可以用来防止头文件重复引用,而const不能,可以参看下面代码:

//主要把以下代码放在头文件中,可以防止头文件被重复引用
#ifndef xxx//如果没有定义xxx
#define xxx//定义xxx

//这里是你的代码

#endif //结束如果
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

PS: 下面说一下,头文件被重复引用的弊端: 
(1) 有些头文件重复引用只是增加了编译工作的工作量,不会引起太大的问题,仅仅是编译效率低一些,但是对于大工程而言编译效率低下那将是一件多么痛苦的事情。 
(2) 有些头文件重复包含,会引起错误,比如在头文件中定义了全局变量(虽然这种方式不被推荐,但确实是C规范允许的)这种会引起重复定义。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值