(1) 编译器处理方式不同

  define宏是在预处理阶段展开。

  const常量是编译运行阶段使用。

(2) 类型和安全检查不同

  define宏没有类型,不做任何类型检查,仅仅是展开。

  const常量有具体的类型,在编译阶段会执行类型检查。

(3) 存储方式不同

  define宏仅仅是展开,有多少地方使用,就展开多少次,不会分配内存。(宏定义不分配内存,变量定义分配内存。)

  const常量会在内存中分配(可以是堆中也可以是栈中)。

(4)const  可以节省空间,避免不必要的内存分配。 例如:  
        #define PI 3.14159 //常量宏  
        const doulbe Pi=3.14159; //此时并未将Pi放入ROM中 ......  
        double i=Pi; //此时为Pi分配内存,以后不再分配!  
        double I=PI; //编译期间进行宏替换,分配内存  
        double j=Pi; //没有内存分配  
        double J=PI; //再进行宏替换,又一次分配内存!  
        const定义常量从汇编的角度来看,只是给出了对应的内存地址,而不是象#define一样给出的是立即数,所以,const定义的常量在程序运行过程中只有一份拷贝(因为是全局的只读变量,存在静态区),而 #define定义的常量在内存中有若干个拷贝。 
(5) 提高了效率。 编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。

转载于:https://www.cnblogs.com/Key-Ky/p/8109417.html

const和define在值定义上的区别相关推荐

  1. C++ 中 const和define的区别

    来源网址:http://wujiangping.blog.163.com/blog/static/195182011201255115125205/ 请区别用#define命令定义的符号常量和用con ...

  2. C++day01 const和define之间的区别

    大家好,我是阿林,一个c++的初学者.记录我学习c++的过程. 今天主要讲的是 const和define之间的区别 const和define都是定义常量,但是它们却有着定义域,作用域上的不同. def ...

  3. define宏定义和const定义之间的区别

    define部分: 宏不仅可以用来代替常数值,还可以用来代替表达式,甚至是代码段.(宏的功能很强大,但也容易出错,所以其利弊大小颇有争议.) 宏的语法为: #define 宏名称 宏值 注意,宏定义不 ...

  4. [翻译]PHP中define()和const定义常量的区别

    在PHP中可以通过define()和const两种方式定义常量 可是在开发中我们应该什么时候用define()定义常量,什么时候用const定义常量? 这两种方式定义常量的主要区别是什么? 从5.3版 ...

  5. C++ const与define

    昨日面试被组考官问及const与define异同,开始还简单,后来被问的我脑袋是一团浆糊.今日差点资料总结一下 1. const与define. 两者都可以用来定义常量,但是const定义时,定义了常 ...

  6. const与#define的异同

    1  作为常量时的异同 (0)  相同 两者都可以用来定义常量: #define PI 3.14159 // 常量宏         const doulbe Pi=3.14159; // 常量 (1 ...

  7. C语言 const 和 define 区别 - C语言零基础入门教程

    目录 一.const 使用 1.const 修饰变量 2.const 修饰指针 3.const 修饰在函数名前面 4.const 修饰在函数名后面 5.const 修饰函数参数 二.define 使用 ...

  8. c语言中const对于define优点,为什么大多数C开发人员使用define而不是const?

    这有一个非常可靠的原因:C中的const并不意味着一些常量. 这只是意味着一个variables是只读的. 在编译器需要一个常量的地方(例如非VLA数组的数组大小),使用constvariables( ...

  9. 电视红外/蓝牙遥控器键值定义和适配

    电视遥控器适配和常见问题 遥控器键值适配 遥控器键值适配 一般来说,遥控器分蓝牙遥控器和红外遥控器.红外遥控器是指遥控器通过红外发射器把信号进行发射,接收设备则通过红外接收器进行信号接收:蓝牙遥控器是 ...

  10. C语言 const 和 define 区别

    一.const 使用 const是 constant 的缩写,"恒定不变"的意思.被 const 修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性.所以很多C++程 ...

最新文章

  1. 最好用的修改docker镜像源的方式
  2. Oracle中的rownum和rowid
  3. centos6.0下ffmpeg的安装编译经历
  4. Introduction to Mathematical Thinking - Week 3
  5. 二、前端pink老师的CSS定位学习笔记(超详细,简单易懂)
  6. 记录webpack commonJs 加载文件规则
  7. Redis-与spring的集成(XML形式)
  8. Oracle EBS学习网站列表
  9. python中如何判断一个变量的数据类型?(原创)
  10. 营销再好终归还要产品说话,留给大神X7的时间不多了
  11. 遍历frame中的表单:
  12. 三维平面叠加图_无人机倾斜摄影技术在三维实景GIS的应用
  13. 超过4g文件怎么放进u盘Linux,怎么用U盘装大于4G的系统 U盘装系统不能放超过4G镜像的解决方法...
  14. 2023西安电子科技大学计算机考研信息汇总
  15. linux编辑文件发生错误E45: ‘readonly‘ option is set (add ! to override)
  16. 解决ubuntu18.04打不开网易云音乐(亲测可行!
  17. Java十六进制操作
  18. PC 视频播放器(超好)
  19. 2011.4.5 凌晨 3:50分
  20. verilog-10101状态机序列检测器的设计

热门文章

  1. 手机站的拨打电话和发短信
  2. uva 1328(kmp)
  3. jmeter正则表达式提取器使用
  4. windows开启Apache的mod_rewrite模块
  5. Entity Framework 笔记(一)
  6. [COCI2009]Dvapravca
  7. bzoj千题计划152:bzoj3405: [Usaco2009 Open]Grazing2 移动牛棚
  8. history(路由控制)
  9. Google Chrome Native Messaging开发实录(二)Chrome Extension扩展
  10. ThreadLocal对象使用过程中容易陷入的坑