C语言enum关键字

很多初学者对枚举(enum)感到迷惑,或者认为没什么用,其实枚举(enum)是个很有用的数据类型。

一、枚举类型的使用方法

一般的定义方式如下:
enum enum_type_name
{
   ENUM_CONST_1,
   ENUM_CONST_2,
   ...
   ENUM_CONST_n
} enum_variable_name;

注意:enum_type_name 是自定义的一种数据数据类型名,而enum_variable_name 为enum_type_name类型的一个变量,也就是我们平时常说的枚举变量。实际上enum_type_name类型是对一个变量取值范围的限定,而花括号内是它的取值范围,即enum_type_name 类型的变量enum_variable_name 只能取值为花括号内的任何一个值,如果赋给该类型变量的值不在列表中,则会报错或者警告。ENUM_CONST_1、ENUM_CONST_2、...、ENUM_CONST_n,这些成员都是常量,也就是我们平时所说的枚举常量(常量一般用大写)。

enum 变量类型还可以给其中的常量符号赋值,如果不赋值则会从被赋初值的那个常量开始依次加1,如果都没有赋值,它们的值从0 开始依次递增1。如分别用一个常数表示不同颜色:
enum Color
{
   GREEN = 1,
   RED,
   BLUE,
   GREEN_RED = 10,
   GREEN_BLUE
}ColorVal;

其中各常量名代表的数值分别为:
   GREEN = 1
   RED = 2
   BLUE = 3
   GREEN_RED = 10
   GREEN_BLUE = 11

二、枚举与#define 宏的区别

下面再看看枚举与#define 宏的区别:
1)#define 宏常量是在预编译阶段进行简单替换。枚举常量则是在编译的时候确定其值。
2)一般在编译器里,可以调试枚举常量,但是不能调试宏常量。
3)枚举可以一次定义大量相关的常量,而#define 宏一次只能定义一个。

留两个问题:
A),枚举能做到事,#define 宏能不能都做到?如果能,那为什么还需要枚举?
B),sizeof(ColorVal)的值为多少?为什么?

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

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

相关文章

Dubbo 需求、架构、使用Demo

只是整理下方便自己记录 内容全部来自官网:http://dubbo.io/books/dubbo-user-book/preface/usage.html 一、需求 在大规模服务化之前,应用可能只是通过 RMI 或 Hessian 等工具,简单的暴露和引用远程服务,通过配置服务的URL地址进…

Ubuntu安装之python开发

Ubuntu安装之python开发 什么??Ubuntu(乌班图)开发?不会用??怎么进行python开发??? 乌班图操作系统下载地址:http://releases.ubuntu.com/18.04/ubuntu-18.04.1-desktop-…

vimdiff和vim-fugitive安装,使用教程

1、vimdiff的安装 在终端执行 git config --global merge.tool vimdiff git config --global merge.conflictstyle diff3 git config --global mergetool.prompt false git config --global diff.tool vimdiff git config --global difftool.prompt false git config --…

在 PowerPoint 2016 中嵌入网页

之前在智图这个网站上做了一张地图,在嵌入 PPT 里面的时候碰到了一些问题,现在把找到的解决方法写下来。 PPT 里面自带的 WebBrowser 控件可以实现网页浏览的功能。在“开发工具”选项卡下的“其他控件”中找到“Microsoft Web Browser”,在画…

js 正则表达式 整合

正则表达式:断言 取字符串区间: /(?<[" star "]).*(?[" end "])/// 简单封装 Vue.prototype.strMatch (str,star,end) > { let regs new RegExp("(?<[" star "]).*(?[" end "])"); let req str…

dubbo 注册中心zookeeper 手册

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 zookeeper 注册中心 Zookeeper 是 Apacahe Hadoop 的子项目&#xff0c;是一个树型的目录服务&#xff0c;支持变更推送&#xff0c;适…

数组 深入详解

再论C语言数组 C语言处理数组的方式是它广受欢迎的原因之一。C语言对数组的处理是非常有效的&#xff0c;其原因有以下三点&#xff1a;第一&#xff0c;除少数翻译器出于谨慎会作一些繁琐的规定外&#xff0c;C语言的数组下标是在一个很低的层次上处理的。但这个优点也有一个反…

oracle ins-30131错误

打开cmd 但是在我的环境没效果&#xff0c;而我已知临时目录没有问题。那么在命令行进入安装软件目录&#xff0c;通过命令行启动安装程序&#xff0c;设置 ignorePrereq 检查&#xff0c;此时数据库软件可以启动安装&#xff0c;是否会出现错误&#xff0c;就看忽略的检查是否…

iOS开发UI篇—简单介绍静态单元格的使用

一、实现效果与说明 说明&#xff1a;观察上面的展示效果&#xff0c;可以发现整个界面是由一个tableview来展示的&#xff0c;上面的数据都是固定的&#xff0c;且几乎不会改变。 要完成上面的效果&#xff0c;有几种方法&#xff1a; &#xff08;1&#xff09;可以直接利用代…

展示内容

今天课上展示了软件 评价为过于简单 还需另寻他法转载于:https://www.cnblogs.com/wmqlzm/p/10041683.html

dubbo ,dubbo-provider、dubbo-consumer 配置参数说明

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 dubbo:consumer 服务消费者缺省值配置。配置类&#xff1a; com.alibaba.dubbo.config.ConsumerConfig 。同时该标签为 <dubbo:refer…

laraval使用sqlite设置从多少开始递增

DB::statement( "UPDATE SQLITE_SEQUENCE SET seq 起始值 WHERE name 表名" ); sqlite3默认就是1。 新建了含PRIMARY KEY AUTOINCREMENT 主键自增表(如 test1)后&#xff0c;会自动在sqlite_sequence表插入或更新一条信息&#xff0c;其中保存了相关主键的最大值&…

指针深入探讨

C语言变量的内存实质 一、先来理解C语言中变量的实质 要理解C指针&#xff0c;我认为一定要理解C中“变量”的存储实质&#xff0c;所以我就从“变量”这个东西开始讲起吧&#xff01;先来理解理解内存空间吧&#xff01;请看下图&#xff1a; 如上图所示&#xff0c;内存只不…

springboot_yml配置

server: port: 8097 session-timeout: 30 tomcat.max-threads: 0 tomcat.uri-encoding: UTF-8 spring: application: name: feedback # 数据库配置 datasource: name: test #url: jdbc:mysql://192.168.0.180:3306/dsdb #url: jdbc:m…

Python 字符串查找子串的方法之 index() 和 find()

find(substr, beg0, endlen(string)): 在[beg, end]范围内查找substring&#xff0c;找到返回substr的起始下标&#xff0c;否则返回 -1。 1 string Hello Python 2 print(string.find(h, 0, len(string))) # 输出 9 3 print(string.find(thon) # 输出 84 print(strin.find(…

sqlite 设置向下递增

因为 sqlite是没有floor函数的 所以用 cast(x as int) - (x < cast(x as int)) 原理 cast(1.1 as int) 1 cast(-1.1 as int) -1&#xff08;我们想要的结果为2&#xff09; 如果x为非负 cast(x as int)是可以的 但是有负的话就加上后面 (x < cast(x as int))…

Docker 是什么,组成

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 一、Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的容器中&#xff0c;然后发布到任…

VC6.0详细教程

1 编制并运行一个简单程序 1.1 编制并运行程序的“四步曲”1.2 工程(PROJECT)以及工程工作区(PROJECT WORKSPACE)1.3 启动并进入VC6的集成开发环境1.4 创建工程并输入源程序代码(1)新建一Win32 Console Application工程(2)在工作区窗口中查看工程的逻辑架构(3)在工程中新建C源…

vim搜索替换工具

1、ag.vim(查找工具)安装 在vimrc中添加 Plug rking/ag.vim 使用 :Ag 你要查找的内容 e open file and close the quickfix window. o open file (same as enter). go preview file (open but mainta…

JAVA好学吗?工资待遇怎么样?

时代的进步也离不开互联网的推动&#xff0c;互联网的发展已经形成了一种趋势&#xff0c;而在这种大环境下我们不应该抗拒&#xff0c;如果自身条件允许&#xff0c;加入进来未尝不是一个好的选择。而在计算机行业内&#xff0c;JAVA的火爆毋庸自疑&#xff0c;很多人都意识到…