首页 > 其他分享 >#define、const和enum

#define、const和enum

时间:2023-12-03 11:46:27浏览次数:21  
标签:const 常量 enum 定义 枚举 define 变量

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

C语言常量:
image

1、const和#define的区别:

const定义的只读变量从汇编角度来看,(使用const变量时)只是给出了对应的内存地址,而不是像#define一样给出的是立即数,所以,二者有有以下几个区别:
① const定义的只读变量在程序运行过程中只有一份拷贝,而#define定义的宏常量在内存中有若干个拷贝。
② #define宏是在预编译阶段进行替换,而const修饰的只读变量是在编译的时候确定其值。
③ #define没有类型,而const修饰的只读变量具有特定的类型。
注意:const修饰的变量必须在定义的同时初始化

2、enum和#define的区别:

(1)、#define宏常量是在预编译阶段进行替换。枚举常量则是在编译的时候确定其值。
(2)、一般在编译器里,可以调试枚举常量,但是不能调试宏常量,这也是为什么有了#define还要有enum的原因。
(3)、枚举可以一次定义大量相关的常量,而#define宏一次只能定义一个。
总结:枚举简单来说是一种数据类型,只不过种数据类型只包含自定义的特定数据,而且枚举具有类型检测这是#define宏做不具备的。
使用枚举搞清楚两个概念,枚举变量和枚举常量,我们知道枚举是种数据类型,是数据类型就可以用了定义变量,所以枚举类型定义的变量称为枚举变量,那么什么是枚举常量呢?其实就是枚举变量所能取的特定数值。如下所示:
image

标签:const,常量,enum,定义,枚举,define,变量
From: https://www.cnblogs.com/wangfeng-98/p/17872745.html

相关文章

  • typedef和#define
    typedef工具是一个高级数据特性,利用typedef可以为某一类型自定义名称(起别名)。这方面和#define类似,但二者有三处不同:1、 与#define不同,typedef创建的符号名只受限于类型(只能作为类型),不能用于值。2、 typedef由编译器解释,不是预处理器。3、 在受限范围内,typedef比#define更加灵......
  • 如何理解 SAP UI5 的 sap.ui.define 函数?
    我们在SAPUI5官网能查到sap.ui.define的详细文档:在一个JavaScript文件中,通常和建议的做法是在文件顶部有一个对sap.ui.define的调用。当通过其模块ID首次请求一个模块时,会根据ID和当前配置来确定对应的资源。该资源将被加载并执行,这将反过来执行顶级的sap.ui.defi......
  • [good]enum
    typedefenum{Reg_Set_Speed=100,//100Reg_Set_Enable_VSP,//101Reg_Set_Dir,//102Reg_Force_Stop}Modbus_Holding_Registors;这是一个C语言中的`enum`(枚举)类型定义。枚举是一种用户定义的数据类型,它可以包含几个用户定义的值。在这个例子中,`M......
  • TypeError: Cannot read properties of undefined (reading '$modal')
    原代码:handleFinish(row){this.$modal.confirm('确认录取学生编号为"'+row.stuCode+'"的成绩?').then(function(){finishStudentScore({id:row.id}).then((response)=>{if(response.code==......
  • 使用emqttd时执行emqttd console时无反应或者报错Node undefined not responding to p
    1.无反应:  2.报错:Nodeundefinednotrespondingtopings. 解决办法:路径不能有空格,最好用存英文的路径。......
  • (二十五)C#编程基础复习——enum枚举类型
    枚举类型(也可以成为“枚举器”)由一组具有独立标志服(名称)的整数类型常量构成,在C#枚举类型不仅可以在类或结构体的内部声明,也可以在类或结构体的外部声明,默认情况下枚举类型中成员的默认值是从0开始的,然后逐一递增。在使用枚举时要注意以下几点:枚举类型中不能定义方法;枚举类型具......
  • 报错:undefined reference to `WinMain'
    报错:undefinedreferenceto`WinMain'错音是编译器找不到main()函数:可能缺少是main()函数,比如main拼写错误可能是main()函数不再全局命名空间中,注意main()函数必须置于默认命名空间(即全局命名空间)下......
  • 解决ls: relocation error: /lib64/libacl.so.1: symbol getxattr, version ATTR_1.0
    解决ls:relocationerror:/lib64/libacl.so.1:symbolgetxattr,versionATTR_1.0notdefinedinfilelibattr.so.1withlinktimereference参考:https://www.cnblogs.com/biohujun/p/17613372.html 这个问题是在我conda装了一个包之后就出现了,ls等最基础的命令没有办......
  • Angular 依赖注入领域里 optional constructor parameters 的概念介绍
    Angular依赖注入(DI)是一个强大且灵活的设计模式,它可以帮助我们更好地管理和组织我们的代码。构造函数参数的可选性(Optional)是AngularDI系统的一个重要特性。这种特性允许我们将某些服务或值作为可选依赖注入到组件或服务中,这样,如果这些服务或值不存在,我们的代码仍然可以正常工......
  • 什么是 Angular 基于 Constructor Parameter 的 Dependency Injection
    在Angular中,依赖注入(DependencyInjection,DI)是一种设计模式,用于处理如何在不同的代码部分创建和传递依赖对象。在Angular中,我们通常依赖于TypeScript的特性,如构造函数参数(constructorparameters)来执行依赖注入。构造函数参数进行依赖注入是AngularDI系统的一个重要特......