enum:枚举类型(枚举变量的值只能等于枚举中定义的常量)
#define:明示常量(定义真正的常量)
const:限定符(名不符实,应该叫read only),限定一个变量为只读

C语言常量:

1、const和#define的区别:

const定义的只读变量从汇编角度来看,(使用const变量时)只是给出了对应的内存地址,而不是像#define一样给出的是立即数,所以,二者有有以下几个区别:

① const定义的只读变量在程序运行过程中只有一份拷贝,而#define定义的宏常量在内存中有若干个拷贝。

② #define宏是在预编译阶段进行替换,而const修饰的只读变量是在编译的时候确定其值。

③ #define没有类型,而const修饰的只读变量具有特定的类型。

注意:const修饰的变量必须在定义的同时初始化

2、enum和#define的区别:

(1)、#define宏常量是在预编译阶段进行替换。枚举常量则是在编译的时候确定其值。

(2)、一般在编译器里,可以调试枚举常量,但是不能调试宏常量,这也是为什么有了#define还要有enum的原因。

(3)、枚举可以一次定义大量相关的常量,而#define宏一次只能定义一个。

总结:枚举简单来说是一种数据类型,只不过种数据类型只包含自定义的特定数据,而且枚举具有类型检测这是#define宏做不具备的。

使用枚举搞清楚两个概念,枚举变量和枚举常量,我们知道枚举是种数据类型,是数据类型就可以用了定义变量,所以枚举类型定义的变量称为枚举变量,那么什么是枚举常量呢?其实就是枚举变量所能取的特定数值。如下所示:

#define、const和enum的更多相关文章

  1. EC笔记,第一部分:2.尽量以const,enum,inline代替#define

    02.尽量以const,enum,inline代替#define 原因:编译前的预处理会替换宏,所以调试的时候找不到错误 1.const 尽量用const替代常量宏定义 两种特殊情况: (1).常量指 ...

  2. Effective C++ 之 Item 2:尽量以 const, enum, inline 替换 #define

    Effective C++ Chapter 1. 让自己习惯C++(Accustoming Yourself to C++) Item 2. 尽量以 const, enum, inline 替换 #d ...

  3. 条款2:尽量以const、enum、inline替换#define

    1> 以const替换#define • 比如用const double Ratio = 1.653替换#define RATIO 1.653 因为宏定义在预处理阶段就会被替换成其所指代的内容, ...

  4. 【Effective C++ 读书笔记】条款02: 尽量以 const, enum, inline 替换 #define

    条款02: 尽量以 const, enum, inline 替换 #define 这个条款或许可以改为“宁可以编译器替换预处理器”. 编译过程: .c文件--预处理-->.i文件--编译--&g ...

  5. effetive C++ 02 尽量以const,enum,inline替换#define

    #define ASPECT_RATIO=1.1const double AspectRatio=1.1 1. 使用宏会导致预处理器把程序代码中的ASPECT_RATIO无条件替换为1.1,编译器从未 ...

  6. C++ 笔记(一) —— 尽量以 const、enum、inline 替换 #define

    ilocker:关注 Android 安全(新手) QQ: 2597294287 #define ASPECT_RATIO 1.653 记号 ASPECT_RATIO 不会进入 symbol tabl ...

  7. 【02】尽量以const,enum,inline替换#define

    1.考虑为什么? 首先,#define不是语言的一部分,而是预编译过程.也就是在编译器编译之前,进行文本替换.考虑#define Pi 3.1425:在编译之前,Pi都会被文本替换为3.1415,因此 ...

  8. #define vs. const vs enum

    In one word, using const is better than define. enum is the best. There are lots of discussions. I p ...

  9. 1.尽量以const ,enum,inline替换define

    1.#define为预处理阶段命令 原因:有可能记号名称没有进入记号表,而出现编译错误,即编译器并没看到过该定义. class专属常量const 一般定义为static,保证该常量至多有一份实体. 枚 ...

  10. 《Effective C++》读书笔记 条款02 尽量以const,enum,inline替换#define

    Effective C++在此条款中总结出两个结论 1.对于单纯常量,最好以const对象或enum替换#define 2.对于形似函数的宏,最好改用inline函数替换#define 接下来我们进行 ...

随机推荐

  1. NodeJs初探索

    练习1:模块之间的引用 a.js // 引入b.js模块 var b = require("./b"); // 调用对象里的方法: 对象.属性名 对象.方法名() b.add(); ...

  2. git fork 项目的更新

    fork:github网站的操作,将开源项目复制一份到自己的仓库中 那fork的项目在原仓库更新后,如何同步呢? 1.查看远程仓库 $ git remote -v origin https://cod ...

  3. SpringCloud做的微服务项目--外卖订餐系统

    本项目用到的组件技术可以参考我上一篇博客,来学习. 项目需求: 客户端:针对普通用户,用户登录,用户退出,菜品订购,我的订单 后台管理系统:针对管理员,管理员登录,管理员退出,添加菜品,查询菜品,修改 ...

  4. 《Effective C#》系列之(五)——优化集合的使用

    一.优化集合的使用 在<Effective C#>这本书中,优化集合的使用是其中一章的内容.以下是该章节的一些核心建议,以及使用C#代码示例说明: 使用泛型集合:泛型集合可以避免装箱和拆箱 ...

  5. EasyNLP玩转文本摘要(新闻标题)生成

    简介: 本⽂将提供关于PEGASUS的技术解读,以及如何在EasyNLP框架中使⽤与PEGASUS相关的文本摘要(新闻标题)生成模型. 作者:王明.黄俊 导读 文本生成是自然语言处理领域的一个重要研究 ...

  6. 【云原生】拿下 Gartner 容器产品第一,阿里云打赢云原生关键一战!

    近日,Gartner 发布 2020 年公共云容器报告,据报告显示,阿里云和 AWS 拥有最丰富的产品布局,覆盖 9 项产品能力,并列排名第一. 据 Gartner 分析师评论,阿里云拥有丰富的容器产 ...

  7. 毕业两年升主管,自沉稳而后顾人 对话阿里云MVP陈琦

    所有伟大都源于一个勇敢的开始 我跟可视化结缘是一个巧合,一开始并没有很笃定要做这个方向.2015年可视化的市场还不繁荣,我在创业公司实习,跟领导层一起参加各种创业大赛路演,当时我做的主要工作就是和领导 ...

  8. Serverless Devs 的官网是如何通过 Serverless Devs 部署的

    简介: 只有自己吃自己的狗粮,自己做的东西才不"".Serverless Devs 自发展之处到现在,已经经历了几个月的时间,在这几个月,Serverless Devs 的成长是迅 ...

  9. 实时数仓入门训练营:实时计算 Flink 版 SQL 实践

    ​简介: <实时数仓入门训练营>由阿里云研究员王峰.阿里云资深技术专家金晓军.阿里云高级产品专家刘一鸣等实时计算 Flink 版和 Hologres 的多名技术/产品一线专家齐上阵,合力搭 ...

  10. dotnet 使用增量源代码生成技术的 Telescope 库导出程序集类型

    本文将告诉大家在 dotnet 里面使用免费完全开源的基于增量源代码生成技术的 Telescope 库,进行收集导出项目程序集里面指定类型.可以实现性能极高的指定类型收集,方便多模块对接入自己的业务框 ...