const 和宏定义的区别是什么

const 和宏定义的区别有:1、编译器处理方式不同;2、类型和安全检查不同;3、存储方式不同;4、const可以节省空间,避免不必要的内存分配;5、提高了效率。define宏是在预处理阶段展开,而const常量是编译运行阶段使用。

const 和宏定义的区别是什么-Worktile社区

1、编译器处理方式不同

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

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

2、类型和安全检查不同

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

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

3、存储方式不同

define宏仅仅是展开,有多少地方使用,就展开多少次,不会分配内存。

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

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

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常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。

延伸阅读:

什么是const?

const是一个C语言(ANSI C)的关键字,具有着举足轻重的地位。它限定一个变量不允许被改变,产生静态作用。使用const在一定程度上可以提高程序的安全性和可靠性。另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一定帮助。另外CONST在其它编程语言中也有出现,例如Pascal、C++、PHP5、B#.net、HC08 C、C#等。

const修饰的数据类型是指常类型,常类型的变量或对象的值是不能被更新的。

const 推出的初始目的,正是为了取代预编译指令,消除它的缺点,同时继承它的优点。

文章标题:const 和宏定义的区别是什么,发布者:小编,转载请注明出处:https://worktile.com/kb/p/37349

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小编小编认证作者
上一篇 2023年2月7日 下午10:10
下一篇 2023年2月7日 下午10:13

相关推荐

  • app一般的开发流程是什么

    app一般的开发流程是:1、需求收集与分析;2、原型设计;3、UI设计;4、开发;5、发布和推广;6、运营和维护。需求收集与分析通常是由产品经理或项目经理来负责,他们需要和客户或用户沟通,了解具体的需求和目标。 第一步:需求收集与分析 在开始任何一个项目之前,首先需要进行需求收集与分析。这一步骤是非…

    2023年3月3日
    16500
  • 如何通过CRM提供个性化的客户体验

    通过CRM提供个性化的客户体验要做到以下几点:1、创建个性化的客户旅程计划;2、使用智能技术增强个性化;3、借助人工智能提升个性化。越来越多的企业开始运用CRM系统以更加及时、更有针对性、更具个性化的方式为客户提供服务。 1、创建个性化的客户旅程计划 在制定个性化和高效率的客户旅程计划时,企业名列前…

    2022年11月7日
    39500
  • 红帆oa医院系统

    红帆OA医院系统提供有效的医疗机构行政运营解决方案,特别针对医疗信息化管理需求设计。该系统整合了日常行政事务处理、资源调配、信息传递和决策支持等功能,能显著提升医院管理效率和服务质量。红帆OA医院系统的特点主要包括:1、流程自动化;2、信息集成;3、安全性高;4、操作便捷;5、支持移动办公。其中,流…

    2024年1月15日
    13300
  • 数据库为什么要分左连接和右连接呢

    原因是:左连接和右连接的选择取决于需要查询的数据和查询的目的。如果需要查询主表中的所有数据以及与之匹配的次要表数据,则应该使用左连接。如果需要查询次要表中的所有数据以及与之匹配的主表数据,则应该使用右连接。 在数据库中,连接是指将两个或多个表中的数据组合成一个结果集的操作。左连接和右连接是连接操作中…

    2023年5月30日
    43200
  • Java序列化与不序列化有什么区别

    Java序列化与不序列化的区别:序列化就是通过网络中的管道,切成一个一个小的数据包(有编号,拆分)放到硬盘文件。一个个小的数据包(组装)恢复到内存中,就是反序列化。 一、定义 序列化的原本意图是希望对一个Java对象作一下“变换”,变成字节序列,这样一来方便持久化存储到磁盘,避免程序运行结束后对象就…

    2023年2月10日
    54800
  • 架构师和项目经理的区别

    架构师和项目经理的区别有:1、角色定位不同;2、工作内容不同;3、所需技能不同;4、决策职责不同;5、培训背景不同;6、与团队的关系不同。其中,角色定位不同指的是,架构师主要关心系统的技术和结构,而项目经理则是关心项目的进度和资源管理。 1、角色定位不同 架构师:他们主要负责软件或系统的技术设计和架…

    2023年7月30日
    54400
  • 信息管理系统软件有哪些好处

    好处有:一、节约成本和精益管理的优势;二、系统集成的优势;三、知识和成功经验传递的优势;四、规范流程的优势。通过ERP系统的引入和实施,可以大大降低企业的运营成本,包括管理协调成本、产品生产成本、材料消耗减少和无效库存消除等。 一、节约成本和精益管理的优势 通过ERP系统的引入和实施,可以大大降低企…

    2023年5月23日
    40300
  • 在bug修复工作中,如何对团队成员进行合理的任务分配和协作

    在bug修复工作中,进行高效的任务分配和团队协作关键在于1、明确每位成员的技能和专长、2、利用缺陷跟踪工具、3、建立优先级排序、4、采用可靠的沟通渠道、5、进行定期的进度检查与反馈。首先需评估团队成员的能力,确保任务和能力相匹配。运用缺陷跟踪工具可以明确责任,避免冗余工作。通过设定优先级确保关键bu…

    2023年12月18日
    13800
  • 云原生部署中常见的安全风险

    针对云原生部署中常见的安全风险,可以归纳如下:1、配置疏漏造成的数据泄露、2、容器管理和隔离性不足带来的安全问题、3、依赖库中的漏洞、4、API暴露引发的安全漏洞、5、内部人员滥用权限、6、供应链攻击、7、不可控的网络安全威胁。 重点讨论配置疏漏造成的数据泄露,配置疏漏可能包括非必要的权限赋予、不当…

    2023年12月28日
    13900
  • 新一代oa系统

    标题:新一代OA系统的构建与实践 新一代OA办公自动化系统的主题指向改善办公效率、提升数据安全性、促进移动办公和支持智能化决策。该系统塑造了1、统一的沟通协作平台、2、强大的业务流程管理、3、先进的数据分析与报告和4、灵活的系统集成能力。其中,统一的沟通协作平台贯穿全组织,实现即时通讯、视频会议、文…

    2024年1月12日
    8700

发表回复

登录后才能评论
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部