【C语言】enum 关键字

news2024/10/6 13:05:43

在这里插入图片描述

在C语言中,enum关键字用于定义枚举类型。枚举是一种用户自定义的数据类型,由一组命名的整型常量构成。使用枚举可以提高代码的可读性和可维护性,特别是在表示一组相关的常量时。

定义和使用枚举类型

基本定义

要定义一个枚举类型,使用enum关键字,后跟枚举类型的名称和一组枚举常量。

#include <stdio.h>

// 定义一个枚举类型
enum Day {
    SUNDAY,
    MONDAY,
    TUESDAY,
    WEDNESDAY,
    THURSDAY,
    FRIDAY,
    SATURDAY
};

int main() {
    // 声明一个枚举类型的变量
    enum Day today;
    today = WEDNESDAY;

    if (today == WEDNESDAY) {
        printf("Today is Wednesday.\n");
    }

    return 0;
}

在这个例子中,定义了一个名为Day的枚举类型,其中包含七个枚举常量。然后在main函数中声明了一个Day类型的变量today,并将其设置为WEDNESDAY

枚举常量的值

默认情况下,枚举常量的值从0开始,依次递增。如果需要,可以显式地为枚举常量指定值。

#include <stdio.h>

// 定义一个枚举类型,并显式指定枚举常量的值
enum Month {
    JANUARY = 1,
    FEBRUARY,
    MARCH,
    APRIL,
    MAY,
    JUNE,
    JULY,
    AUGUST,
    SEPTEMBER,
    OCTOBER,
    NOVEMBER,
    DECEMBER
};

int main() {
    // 声明一个枚举类型的变量
    enum Month currentMonth;
    currentMonth = JULY;

    printf("The current month is %d.\n", currentMonth);

    return 0;
}

在这个例子中,枚举常量JANUARY被显式设置为1,后续的枚举常量的值依次递增,因此FEBRUARY的值为2,MARCH的值为3,以此类推。

枚举的用法示例

以下是一个更复杂的示例,展示了枚举类型的多种用法:

#include <stdio.h>

// 定义一个枚举类型
enum TrafficLight {
    RED,
    YELLOW,
    GREEN
};

// 定义一个函数,使用枚举类型作为参数
void printLightStatus(enum TrafficLight light) {
    switch (light) {
        case RED:
            printf("Stop!\n");
            break;
        case YELLOW:
            printf("Caution!\n");
            break;
        case GREEN:
            printf("Go!\n");
            break;
        default:
            printf("Invalid light!\n");
    }
}

int main() {
    enum TrafficLight currentLight;

    currentLight = RED;
    printLightStatus(currentLight);

    currentLight = YELLOW;
    printLightStatus(currentLight);

    currentLight = GREEN;
    printLightStatus(currentLight);

    return 0;
}

在这个示例中,定义了一个名为TrafficLight的枚举类型,并定义了一个函数printLightStatus,它接受一个TrafficLight类型的参数并根据其值打印相应的交通信号灯状态。

枚举类型与位掩码

枚举类型还可以与位掩码结合使用,以便在一个变量中表示多个标志。以下是一个示例:

#include <stdio.h>

// 定义一个枚举类型,使用位掩码表示标志
enum FilePermissions {
    READ = 1 << 0,  // 0001
    WRITE = 1 << 1, // 0010
    EXECUTE = 1 << 2 // 0100
};

// 定义一个函数,检查文件权限
void checkPermissions(int permissions) {
    if (permissions & READ) {
        printf("Read permission granted.\n");
    }
    if (permissions & WRITE) {
        printf("Write permission granted.\n");
    }
    if (permissions & EXECUTE) {
        printf("Execute permission granted.\n");
    }
}

int main() {
    int myPermissions = READ | EXECUTE; // 组合权限

    checkPermissions(myPermissions);

    return 0;
}

在这个示例中,定义了一个FilePermissions枚举类型,其中每个枚举常量表示一个位掩码标志。通过组合这些标志,可以在一个整数变量中表示多个权限。函数checkPermissions使用位运算来检查并打印权限状态。

总结

enum关键字在C语言中用于定义枚举类型,通过一组命名的整型常量来提高代码的可读性和可维护性。枚举类型广泛应用于表示一组相关的常量,如星期几、月份、交通信号灯状态等。此外,枚举类型还可以与位掩码结合使用,以便在一个变量中表示多个标志。合理使用枚举类型可以使代码更清晰、更易于理解。

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

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

相关文章

党建科普3D数字化展馆支持实时更新迭代

3D虚拟策展逐渐成为新时代下的主流方式&#xff0c;深圳华锐视点作为专业的web3d开发公司&#xff0c;具有专业化的3D数字化空间还原能力&#xff0c;能根据企业/个人不同需求和预算&#xff0c;为您打造纯线上虚拟3D艺术展&#xff0c;让您彻底摆脱实体美术馆的限制&#xff0…

使用Ckman部署ClickHouse集群介绍

使用Ckman部署ClickHouse集群介绍 1. Ckman简介 ClickHouse Manager是一个为ClickHouse数据库量身定制的管理工具&#xff0c;它是由擎创科技数据库团队主导研发的一款用来管理和监控ClickHouse集群的可视化运维工具。目前该工具已在github上开源&#xff0c;开源地址为&…

【基于R语言群体遗传学】-4-统计建模与算法(statistical tests and algorithm)

之前的三篇博客&#xff0c;我们对于哈代温伯格遗传比例有了一个全面的认识&#xff0c;没有看的朋友可以先看一下前面的博客&#xff1a; 群体遗传学_tRNA做科研的博客-CSDN博客 1.一些新名词 &#xff08;1&#xff09;Algorithm: A series of operations executed in a s…

uni-app上传失败超出文件限制解决方法-分包处理-预加载

分包背景 当你的上传出现一下错误&#xff1a; Error: 系统错误&#xff0c;错误码&#xff1a;80051,source size 2089KB exceed max limit 2MB [20240703 10:53:06][wxbf93dfb6cb3eb8af] [1.06.2405010][win32-x64] 说明你主包太大需要处理了&#xff0c;一下两种方法可以…

51单片机嵌入式开发:STC89C52操作8八段式数码管原理

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 STC89C52操作8八段式数码管原理 1 8位数码管介绍1.1 8位数码管概述1.2 8位数码管原理1.3 应用场景 2 原理图图解2.1 74HC573原理2.2 74HC138原理2.3 数码管原理 3 数码管程序…

QT_GUI

1、QT安装 一个跨平台的应用程序和用户界面框架&#xff0c;用于开发图形用户界面&#xff08;GUI&#xff09;应用程序以及命令行工具。QT有商业版额免费开源版&#xff0c;一般使用免费开源版即可&#xff0c;下面安装的是QT5&#xff0c;因为出来较早&#xff0c;使用较多&…

【前端CSS3】CSS引入方式总结(黑马程序员)

文章目录 一、前言&#x1f680;&#x1f680;&#x1f680;二、CSS引入方式&#xff1a;☀️☀️☀️2.1 内部样式表2.2 行内样式表 三、总结&#x1f680;&#x1f680;&#x1f680; 一、前言&#x1f680;&#x1f680;&#x1f680; ☀️ 回报不在行动之后&#xff0c;回报…

ETL数据集成丨使用ETLCloud实现MySQL与Greenplum数据同步

我们在进行数据集成时&#xff0c;MySQL和Greenplum是比较常见的两个数据库&#xff0c;我们可以通过ETLCloud数据集成平台&#xff0c;可以快速实现MySQL数据库与数仓数据库&#xff08;Greenplum&#xff09;的数据同步。 MySQL数据库&#xff1a; 优点&#xff1a; 轻量级…

Java实现电子围栏的小例子

主要需求是实现一个电子围栏判断的小例子其中包括前端和后端的demo代码 public class GeoFenceUtils {/** geometryFactory */private static final GeometryFactory geometryFactory new GeometryFactory();/*** 判断指定的GPS点是否在电子围栏内** param fencePointsList 包…

上海小程序开发需要进行定制开发吗?

随着互联网技术与移动设备的不断成熟&#xff0c;小程序也已普及到人们日常生活的方方面面。随着企业与互联网联结的愈发深入&#xff0c;小程序的开发可以为企业带来更高效的经营模式&#xff0c;降本增效。那么&#xff0c;上海小程序作为无需安装且开发门槛较低的应用&#…

udp发送数据如果超过1个mtu时,抓包所遇到的问题记录说明

最近在测试Syslog udp发送相关功能&#xff0c;测试环境是centos udp头部的数据长度是2个字节&#xff0c;最大传输长度理论上是65535&#xff0c;除去头部这些字节&#xff0c;可以大概的说是64k。 写了一个超过64k的数据(随便用了一个7w字节的buffer)发送demo&#xff0c;打…

Three.js机器人与星系动态场景(二):强化三维空间认识

在上篇博客中介绍了如何快速利用react搭建three.js平台&#xff0c;并实现3D模型的可视化。本文将在上一篇的基础上强化坐标系的概念。引入AxesHelper辅助工具&#xff0c;带你快速理解camer、坐标原点、可视区域。 Three.js机器人与星系动态场景&#xff1a;实现3D渲染与交互式…

AMEYA360代理:海凌科60G客流量统计雷达模块 4T4R出入口绊数计数

数字化时代&#xff0c;不管是大型商城还是各种连锁店&#xff0c;客流统计分析都可以帮助企业更加精准地了解顾客需求和消费行为。 海凌科推出一款专用于客流量统计的60G雷达模块&#xff0c;4T4R&#xff0c;可以实时进行固定范围内的人体运动轨迹检测&#xff0c;根据人体的…

使用Python3和Selenium打造百度图片爬虫

开篇 本文的目的在于实现一个用来爬取百度图片的爬虫程序,因该网站不需要登录&#xff0c;所以相对来说较为简单。下面的爬虫程序中我写了比较多的注释&#xff0c;以便于您的理解。 准备 请确保电脑上已经安装了与chrome浏览器版本匹配的chromeDriver&#xff0c;且电脑中已经…

使用 HBuilder X 进行 uniapp 小程序开发遇到的问题合集

文章目录 背景介绍问题集锦1. 在 HBuilderX 点击浏览器运行时&#xff0c;报 uni-app vue3编译器下载失败 安装错误2.在 HBuilderX 点击微信小程序运行时&#xff0c;报 微信开发者工具打开项目失败&#xff0c;请参阅启动日志错误 背景介绍 HBuilder X 版本&#xff1a;HBui…

NoSQL 之 Redis 集群部署

前言&#xff1a; &#xff08;1&#xff09;主从复制&#xff1a;主从复制是高可用Redis的基础&#xff0c;哨兵和集群都是在主从复制基础上实现高可用 的。主从复制主要实现了数据的多机备份&#xff0c;以及对于读操作的负载均衡和简单的故障恢复。缺陷&#xff1a; 故障…

Elasticsearch备份数据到本地,并导入到新的服务 es 服务中

文章目录 使用elasticsearch-dump工具备份安装node.js(二进制安装)解压设置环境变量安装elasticsearch-dump docker安装使用ES备份文件到本地 使用elasticsearch-dump工具备份 这个工具备份时间比较长 安装node.js(二进制安装) wget https://nodejs.org/dist/v16.18.0/node-…

E1696 无法打开 源 文件 “point.h“

一段时间没碰vs2022突然导入一个项目就出现下面错误 在网上查了很多办法&#xff0c;都没什么有用。 试了试&#xff0c;相对路径可以解决。 但是每次都要用相对路径太麻烦了。 又试了试&#xff0c;发现还是硬件问题&#xff0c;就像摩托长期不开等到突然想开的时候就死活打…

零障碍入门:SSH免密登录与Hadoop生态系统的完美搭档【实训Day02】

一、 SSH免密登录配置 1 生成公钥和秘钥(在hadoop101上) # su star # cd /home/star/.ssh # ssh-keygen -t rsa 2 公钥和私钥 公钥id_rsa.pub 私钥id_rsa 3 将公钥拷贝到目标机器上(在hadoop101上) # ssh-copy-id hadoop101 # ssh-copy-id hadoop102 # ssh-co…

Hi3861 OpenHarmony嵌入式应用入门--TCP Client

本篇使用的是lwip编写tcp客户端。需要提前准备好一个PARAM_HOTSPOT_SSID宏定义的热点&#xff0c;并且密码为PARAM_HOTSPOT_PSK。还需要准备一个tcp服务&#xff0c;服务ip为PARAM_SERVER_ADDR宏定义&#xff0c;端口为PARAM_SERVER_PORT宏定义。 修改网络参数 在Hi3861开发板…