5. enum(枚举)关键字在C/C++中的作用

enum(枚举)关键字本质是用来定义一组有名字的整数常量,替代直接使用魔法数字(比如 0、1、2),让代码更易读、易维护。

1. 什么是enum?(核心概念)

enum(枚举类型)是C/C++的用户自定义类型,核心目的是:把一组逻辑相关的常量(比如星期、颜色、状态码)赋予有意义的名字,避免代码中出现无意义的数字(比如用 0 表示周一、1 表示周二)。

枚举的本质是整数:默认情况下,第一个枚举常量值为 0,后续依次 +1;也可以手动指定常量的值。

2. C语言中enum的基础用法

(1)基本定义与使用(默认值)
#include<stdio.h>// 定义枚举类型:表示一周的七天enumWeek{Mon,// 默认值 0Tue,// 默认值 1Wed,// 默认值 2Thu,// 默认值 3Fri,// 默认值 4Sat,// 默认值 5Sun// 默认值 6};intmain(){// 定义枚举变量:C语言中需加 enum 关键字(和结构体类似)enumWeektoday=Wed;// 枚举变量本质是整数,可直接打印(输出 2)printf("今天是周%d\n",today);// 用枚举常量替代数字,代码更易读if(today==Wed){printf("今天是周三\n");}return0;}
(2)手动指定枚举常量的值

可以给枚举常量手动赋值,未指定的常量会基于前一个值 +1:

#include<stdio.h>// 手动指定值:周一=1,后续依次+1;周日手动指定=7enumWeek{Mon=1,Tue,// 2Wed,// 3Thu,// 4Fri,// 5Sat,// 6Sun=7};// 另一个例子:状态码(手动跳值)enumStatus{SUCCESS=0,// 成功ERROR=-1,// 通用错误FILE_NOT_FOUND=100,// 文件不存在PERMISSION_DENIED=101// 权限不足};intmain(){enumWeektoday=Mon;printf("今天是周%d\n",today);// 输出 1enumStatuscode=FILE_NOT_FOUND;printf("错误码:%d\n",code);// 输出 100return0;}
(3)C中省略enum定义变量(typedef简化)

和结构体类似,C中定义枚举变量默认需要加enum,可以用typedef简化:

#include<stdio.h>// 用typedef重命名,让Week成为独立类型名typedefenum{Mon=1,Tue,Wed}Week;intmain(){// 无需加 enum,直接定义变量(和C++效果一致)Week today=Tue;printf("今天是周%d\n",today);// 输出 2return0;}

3. C++中enum的扩展(更灵活)

C++兼容C的枚举用法,还做了两个关键扩展:

(1)默认可省略enum定义变量
#include<iostream>usingnamespacestd;enumWeek{Mon=1,Tue,Wed};intmain(){// C++中可直接写 Week,无需加 enumWeek today=Wed;cout<<"今天是周"<<today<<endl;// 输出 3return0;}
(2)强类型枚举(enum class,C++11+)

普通枚举的缺点:常量作用域全局(容易命名冲突)、可隐式转换为整数;enum class解决了这些问题,是C++推荐的写法:

#include<iostream>usingnamespacestd;// 强类型枚举:作用域限定在 Color 内,不可隐式转整数enumclassColor{Red=1,Green=2,Blue=3};intmain(){// 必须写 Color::Red,不能直接写 Red(作用域限定)Color c=Color::Green;// 错误:强类型枚举不能直接打印(避免隐式转换)// cout << c << endl;// 正确:显式转换为整数后打印cout<<(int)c<<endl;// 输出 2// 错误:不能隐式比较枚举和整数// if (c == 2) {}// 正确:和枚举常量比较if(c==Color::Green){cout<<"颜色是绿色"<<endl;}return0;}

4. 枚举的核心使用场景

  • 替代魔法数字:比如状态码(成功/失败)、选项(开/关)、有限取值集合(星期、月份、颜色);
  • 提升代码可读性:if (status == SUCCESS)if (status == 0)更易理解;
  • 限制取值范围:让变量只能取预定义的常量值,避免无效值(比如星期只能是 Mon~Sun)。

总结

  1. 核心作用enum用来定义一组命名的整数常量,替代魔法数字,提升代码可读性;
  2. C vs C++:C定义枚举变量需加enum(可通过typedef简化),C++可省略;C++11+的enum class是强类型枚举,更安全;
  3. 本质:枚举常量是整数,普通枚举可隐式转整数,enum class禁止隐式转换,更符合类型安全。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1132079.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

包装对象揭秘:前端新人踩坑后才懂的JS冷知识

包装对象揭秘&#xff1a;前端新人踩坑后才懂的JS冷知识包装对象揭秘&#xff1a;前端新人踩坑后才懂的JS冷知识引言&#xff1a;我第一次看到 new String("hello") 的时候以为自己眼花了包装对象到底是个啥玩意儿基本类型怎么突然能调方法了&#xff1f;三大包装对象…

前后端分离Web足球青训俱乐部管理后台系统系统|SpringBoot+Vue+MyBatis+MySQL完整源码+部署教程

&#x1f4a1;实话实说&#xff1a;CSDN上做毕设辅导的都是专业技术服务&#xff0c;大家都要生活&#xff0c;这个很正常。我和其他人不同的是&#xff0c;我有自己的项目库存&#xff0c;不需要找别人拿货再加价。我就是个在校研究生&#xff0c;兼职赚点饭钱贴补生活费&…

基于SpringBoot+Vue的墙绘产品展示交易平台管理系统设计与实现【Java+MySQL+MyBatis完整源码】

&#x1f4a1;实话实说&#xff1a;CSDN上做毕设辅导的都是专业技术服务&#xff0c;大家都要生活&#xff0c;这个很正常。我和其他人不同的是&#xff0c;我有自己的项目库存&#xff0c;不需要找别人拿货再加价&#xff0c;所以能给到超低价格。摘要 随着文化创意产业的蓬勃…

基于SpringBoot+Vue的网上租赁系统管理系统设计与实现【Java+MySQL+MyBatis完整源码】

&#x1f4a1;实话实说&#xff1a;CSDN上做毕设辅导的都是专业技术服务&#xff0c;大家都要生活&#xff0c;这个很正常。我和其他人不同的是&#xff0c;我有自己的项目库存&#xff0c;不需要找别人拿货再加价&#xff0c;所以能给到超低价格。摘要 随着互联网技术的快速发…

python 学习笔记(文件和目录操作)

创建目录 os.makedirs可以递归的创建目录结构。 import os os.makedirs(tmp/python/test,exist_okTrue) #exit_ok True指定了&#xff0c;如果某个要创建的目录已经存在&#xff0c;也不报错删除文件或目录 os.remove 可以删除一个文件 os.remove(test.py)**shutil.rmtree()**…

三阶幻方了解-七年级上册

目录 一、三阶幻方的历史1. 起源&#xff1a;洛书&#xff08;中国上古时期&#xff09;2. 中国古代的发展3. 向世界的传播4. 现代价值 二、 现代数学中三阶幻方有哪些应用&#xff1f;1. 组合数学与离散数学2. 密码学与信息编码3. 实验设计与统计学4. 教育与思维训练5. 人工智…

【毕业设计】SpringBoot+Vue+MySQL Web足球青训俱乐部管理后台系统平台源码+数据库+论文+部署文档

&#x1f4a1;实话实说&#xff1a;CSDN上做毕设辅导的都是专业技术服务&#xff0c;大家都要生活&#xff0c;这个很正常。我和其他人不同的是&#xff0c;我有自己的项目库存&#xff0c;不需要找别人拿货再加价&#xff0c;所以能给到超低价格。摘要 随着足球青训产业的快速…

Java SpringBoot+Vue3+MyBatis 社区医院信息平台系统源码|前后端分离+MySQL数据库

&#x1f4a1;实话实说&#xff1a;CSDN上做毕设辅导的都是专业技术服务&#xff0c;大家都要生活&#xff0c;这个很正常。我和其他人不同的是&#xff0c;我有自己的项目库存&#xff0c;不需要找别人拿货再加价。我就是个在校研究生&#xff0c;兼职赚点饭钱贴补生活费&…

SpringBoot+Vue 社区医院信息平台管理平台源码【适合毕设/课设/学习】Java+MySQL

&#x1f4a1;实话实说&#xff1a;CSDN上做毕设辅导的都是专业技术服务&#xff0c;大家都要生活&#xff0c;这个很正常。我和其他人不同的是&#xff0c;我有自己的项目库存&#xff0c;不需要找别人拿货再加价&#xff0c;所以能给到超低价格。摘要 随着信息技术的快速发展…

基于SpringBoot+Vue的学科竞赛管理管理系统设计与实现【Java+MySQL+MyBatis完整源码】

&#x1f4a1;实话实说&#xff1a;CSDN上做毕设辅导的都是专业技术服务&#xff0c;大家都要生活&#xff0c;这个很正常。我和其他人不同的是&#xff0c;我有自己的项目库存&#xff0c;不需要找别人拿货再加价&#xff0c;所以能给到超低价格。摘要 随着高等教育改革的深入…

Java Web 师生健康信息管理系统系统源码-SpringBoot2+Vue3+MyBatis-Plus+MySQL8.0【含文档】

&#x1f4a1;实话实说&#xff1a;CSDN上做毕设辅导的都是专业技术服务&#xff0c;大家都要生活&#xff0c;这个很正常。我和其他人不同的是&#xff0c;我有自己的项目库存&#xff0c;不需要找别人拿货再加价&#xff0c;所以能给到超低价格。摘要 随着信息技术的快速发展…

SpringBoot+Vue IT交流和分享平台管理平台源码【适合毕设/课设/学习】Java+MySQL

&#x1f4a1;实话实说&#xff1a;CSDN上做毕设辅导的都是专业技术服务&#xff0c;大家都要生活&#xff0c;这个很正常。我和其他人不同的是&#xff0c;我有自己的项目库存&#xff0c;不需要找别人拿货再加价&#xff0c;所以能给到超低价格。摘要 在当今信息化快速发展的…

2026-01-09 全国各地响应最快的 BT Tracker 服务器(联通版)

数据来源&#xff1a;https://bt.me88.top 序号Tracker 服务器地域网络响应(毫秒)1udp://60.249.37.20:6969/announce广东肇庆联通292http://211.75.210.221:80/announce广东广州联通323udp://132.226.6.145:6969/announce北京联通614udp://152.53.152.105:54123/announce北京…

脚本编译中怎么将/application/aima或/application/demo目录编译进去的

我先定位顶层 CMake 里选择 aima/demo 的那段逻辑(含行号),然后把它和 build_yaxon.bat 传参、Makefile 调用 cmake 的环境变量传递关系串起来解释清楚。 Read multiple configuration files 把 aima 或 demo 编进最终固件(准确说是编进 userspace 的 customer_app.elf)的…

国产AI真的很不行?四个维度告诉你真相

国产AI真的很不行&#xff1f;四个维度告诉你真相 本文共 2101 字&#xff0c;阅读预计需要 3 分钟。 Hi&#xff0c;你好&#xff0c;我是Carl&#xff0c;一个本科进大厂做了2年AI研发后&#xff0c;裸辞的AI创业者。 国产AI真的很不堪吗&#xff1f; 我看到很多人非常戏谑…

二十三种设计模式(二十二)--策略模式

策略模式(Strategy) 如果某一个程序中用到各种各样的算法, 这些算法如果预编译的程序中会非常臃肿, 此时策略模式就可以实现各种算法的灵活取用 实际需求如下: 我有一个车载道路安全应用程序, 需要FDW道路前向预警功能, TSR道路标志牌识别功能, DMS驾驶员监控功能, 分别对应三种…

二十三种设计模式(二十三)--责任链模式

责任链模式(Chain of Responsibility) 责任链模式处理同样的任务但是分多个等级去做不同的应对的问题 只要出现多个对象处理的是同一个请求, 并且这多个对象是有顺序有条件的去应对请求的, 就要使用责任链模式. 假设我们有一支军队, 我军按照不同的规模编排队伍中人数的大小, 分…

基于Java+SpringBoot+SSM云与糖蛋糕购物平台系统(源码+LW+调试文档+讲解等)/云与糖蛋糕平台/云与糖蛋糕系统/云与糖购物平台/云与糖购物系统/蛋糕购物平台系统/云与糖蛋糕商城

博主介绍 &#x1f497;博主介绍&#xff1a;✌全栈领域优质创作者&#xff0c;专注于Java、小程序、Python技术领域和计算机毕业项目实战✌&#x1f497; &#x1f447;&#x1f3fb; 精彩专栏 推荐订阅&#x1f447;&#x1f3fb; 2025-2026年最新1000个热门Java毕业设计选题…

从底层逻辑到工程实践,深入理解C语言在计算机世界中的核心地位与持久价值

在计算机语言百花齐放的今天&#xff0c;C语言依然占据着一个极其特殊且稳固的位置。它不像某些新兴语言那样语法华丽、生态庞大&#xff0c;也不以“快速开发”“低门槛”为主要卖点&#xff0c;但它却深深嵌入了现代计算机体系的骨骼之中。从操作系统、嵌入式设备到高性能计算…

C语言的性能优化实践全解析:从编译器自动优化机制到程序员手动调优思维与工程经验总结

在众多编程语言中&#xff0c;C语言一直以“高性能、强控制力”著称。但性能并不是自动获得的&#xff0c;它来自于对算法、内存、编译器以及硬件行为的综合理解。真正高效的C程序&#xff0c;往往不是“语法技巧”的堆砌&#xff0c;而是从设计层到实现层都围绕性能目标进行权…