c中 const 与 #define 的区别

1.编译器处理方式不同 
define宏是预处理阶段展开 
const常量是编译运行阶段使用

define是宏定义,程序在预处理阶段将用define定义的内容进行替换,因此程序运行时常量表中并没有用define定义的常量,系统不为其分配内存。 
const常量是编译运行时的常量,系统为其分配内存。

2.类型跟安全检查不同 
define宏没有类型,不做任何类型检查,仅仅是展开 
const常量有具体的类型,编译运行时会执行类型检查

3.存储方式不同 
define仅仅是展开,有多少地方使用就展开多少次,不分配内存 
const常量会在内存中分配(可以在堆中也可以在栈中)

4.const可以节省空间,避免不必要的的内存分配。

define注意“边缘效应”, 
例:

#define N 2+3 /*N的值是5 */
int a = N/2,

/*在编译时我们预想a=2.5,实际打印结果是3.5 
原因是在预处理阶段,编译器将a=N/2处理成a=2+3/2,这就是define宏的边缘效应;* /
所以我们应该写成

#define N (2+3)

使用const的好处

常数比较使用

if (常数c == 变量x)的方式  /*在几千行代码中,经常会漏符号

                                                      例如  if (变量x = 常数c )编译直接通过了;到时程序明明没错,而得出结果却是错的;

                                                       若if(常数c = 变量x)会报ERROR ,节省查代码的时间。*/

代替

if (变量x == 常数c )方式。

 

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值