当前位置: 首页 > news >正文

【C语言】自定义类型、枚举类型与宏定义

目录

  • 一、自定义类型
  • 二、宏定义
  • 三、枚举类型

一、自定义类型

自定义类型关键字:typedef,用新的类型名称代替原有的类型名。
例如:

typedef char u8;
u8 x;

表示指定u8为新的类型名,代替char,作用与char相同,定义了一个字符变量x。

typedef int Integer;

表示指定Integer为新的类型名,代替int,作用与int相同。

typedef float Real;

表示指定Real为新的类型名,代替float,作用与float相同。

实例:

#include <stdio.h>int main()
{//typedef用新的类型名代替原有的类型名typedef unsigned char u8;u8 x = 'a';printf("x=%c",x);return 0;
}

二、宏定义

1、简单宏定义
宏定义方式:#define 标识符 替换列表
例如:

#include <stdio.h>
#define N 20int main()
{int x;x = N;printf("x = %d",x);return 0;
}

2、宏函数(带参宏定义)
带参宏定义的一般形式为:#define 宏名(形参表) 字符串
#define 标识符(x1,x2,x3…xn) 替换列表 (注意:x1,x2,x3…是宏的参数,带参宏定义中,宏名和形参表之间不能有空格出现)

  • 宏函数,在定义时不需要指明返回类型及返回值
  • 宏函数中最后一个表达式的值,即为宏函数的返回值
  • 该值的类型,即为宏函数的返回类型

例如:

#include <stdio.h>
#define WEIGHT 20#define max(x,y)x>y?x:y;
int main()
{int x;x = WEIGHT;printf("x = %d\n",x);x = max(10,20);printf("x = %d\n",x);return 0;
}

三、枚举类型

1、枚举类型的声明
枚举(enum)是 C 语言中的一种基本数据类型,用于定义一组具有离散值的常量,它可以让数据更简洁,更易读。枚举类型通常用于为程序中的一组相关的常量取名字,以便于程序的可读性和维护性。

定义一个枚举类型,需要使用 enum 关键字,后面跟着枚举类型的名称,以及用大括号 {} 括起来的一组枚举常量。每个枚举常量可以用一个标识符来表示,也可以为它们指定一个整数值,如果没有指定,那么默认从 0 开始递增。

定义格式:

enum 枚举名 {枚举元素1,枚举元素2,……};

例如:一星期有 7 天,如果不用枚举,我们需要使用 #define 来为每个整数定义一个别名:

#define MON  1
#define TUE  2
#define WED  3
#define THU  4
#define FRI  5
#define SAT  6
#define SUN  7

这个看起来代码量就比较多,接下来我们看看使用枚举的方式:

enum DAY
{MON=1, TUE, WED, THU, FRI, SAT, SUN
};

第一个枚举成员的默认值为整型的 0,后续枚举成员的值在前一个成员上加 1。我们在这个实例中把第一个枚举成员的值定义为 1,第二个就为 2,以此类推。

2、枚举变量的定义
我们可以通过以下三种方式来定义枚举变量:
(1)先定义枚举类型,再定义枚举变量

enum DAY
{MON=1, TUE, WED, THU, FRI, SAT, SUN
};
enum DAY day;

(2)定义枚举类型的同时定义枚举变量

enum DAY
{MON=1, TUE, WED, THU, FRI, SAT, SUN
} day;

(3)省略枚举名称,直接定义枚举变量

enum
{MON=1, TUE, WED, THU, FRI, SAT, SUN
} day;

实例:

#include <stdio.h>enum DAY
{MON=1, TUE, WED, THU, FRI, SAT, SUN
};int main()
{enum DAY day;day = WED;printf("%d",day);return 0;
}

3、枚举类型的遍历

在C 语言中,枚举类型是被当做 int 或者 unsigned int 类型来处理的,所以按照 C 语言规范是没有办法遍历枚举类型的。
不过在一些特殊的情况下,枚举类型必须连续是可以实现有条件的遍历。

例如:

#include <stdio.h>enum DAY
{MON=1, TUE, WED, THU, FRI, SAT, SUN
} day;
int main()
{// 遍历枚举元素for (day = MON; day <= SUN; day++) {printf("枚举元素:%d \n", day);}
}

以下枚举类型不连续,这种枚举无法遍历。

enum
{ENUM_0,ENUM_10 = 10,ENUM_11
};

相关文章:

【C语言】自定义类型、枚举类型与宏定义

目录一、自定义类型二、宏定义三、枚举类型一、自定义类型 自定义类型关键字&#xff1a;typedef&#xff0c;用新的类型名称代替原有的类型名。 例如&#xff1a; typedef char u8; u8 x;表示指定u8为新的类型名&#xff0c;代替char&#xff0c;作用与char相同&#xff0c;…...

Java进阶(下篇2)

Java进阶&#xff08;下篇2&#xff09;一、IO流01.File类的使用1.1、File类的实例化1.2、File类的常用方法11.3、File类的常用方法21.4、课后练习02、IO流原理及流的分类2.1、IO流原理2.2、流的分类2.3、IO 流体系03、节点流(或文件流)3.1、FileReader读入数据的基本操作3.2、…...

03单链表

、# 单链表 单链表是一种链式存储的数据结构&#xff0c;用一组地址任意的存储单元存放线性表中的数据元素。单链表中的每个结点包含一个数据域和一个指针域&#xff0c;数据域存放数据元素&#xff0c;指针域存放下一个结点的地址。单链表的第一个结点称为头结点&#xff0c;…...

ESLint、Prettier插件的安装与使用

在统一代码风格这一块&#xff0c;通常大家都会用到ESLint。虽然 ESLint 本身具备自动格式化代码的功能&#xff0c;但ESLint 的主要优势在于代码的风格检查并给出提示&#xff0c;而在代码格式化这一块 Prettier 做的更加专业&#xff0c;因此在实际项目开发中我们经常将 ESLi…...

matlab在管理学中的应用简matlab基础【三】

规划论及MATLAB计算 1、线性规划 问题的提出 例1. 某工厂在计划期内要安排甲、乙两种产品的生产&#xff0c;已知生产单位产品所需的资源A、B、C的消耗以及资源的计划期供给量&#xff0c;如下表&#xff1a; 问题&#xff1a;工厂应分别生产多少单位甲、乙产品才能使工厂获…...

NDK JNI 变声器实现

Android NDK 导入 C库的开发流程学习&#xff1b;通过使用fmod的C库&#xff0c;实现变声器功能。导入库文件1&#xff09;复制fmod的C库到cpp目录下2&#xff09;复制fmod的so库到jniLibs目录下3&#xff09;复制fmod的jar库到libs目录下4&#xff09;将声音文件复制到assets目…...

VMLogin防关联指纹浏览器的主帐号和子账号区别介绍

VMLogin主账户管理子账户&#xff0c;主要用于团队协作&#xff0c;分账户登录使用&#xff0c;主账户相当于老板&#xff0c;子账户相当于员工。 主账户创建并管理子账户&#xff1b; 主账户可以修改子账户的密码&#xff1b; 主账户可以设置子账户是否有创建配置文件权限&a…...

Apache DolphinScheduler GitHub Star 突破 10000!

点击蓝字 关注我们今天&#xff0c;Apache DolphinScheduler GitHub Star 突破 10000&#xff0c;项目迎来一个重要里程碑。这表明 Apache DolphinScheduler 已经在全球的开发者和用户中获得了广泛的认可和使用。DolphinScheduler 旨在解决公司日常运营中的大数据处理工作流调度…...

程序员中的女性力量——做不被定义的自己

她是office lady&#xff0c;亦是程序媛&#xff0c;程序员界的靓丽色彩&#xff0c;不可或缺。 “只有那些疯狂到以为自己能够改变世界的人——才能真正改变世界。” 女性该如何定义自己&#xff1f;程序媛怎么发挥自己最大的价值。 争取自己做选择&#xff0c;经济和思想都独…...

pb中Datawindow中每页打印固定行

Datawindow中每页打印固定行 第一步: 增加一个计算列,此计算列必须放在Detail段,Expression中输入:ceiling(getrow()/20),这里20还可以用全局函数取代,这样可以允许用户任意设置每页打印多少行。 第二步: 定义分组,选择菜单Rows->Create Group...按计算列字段…...

华为OD机试 - 内存池(C 语言解题)【独家】

最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧文章目录 使用说明本期题目:内存池题…...

SaaS简介

SaaS 简介 SaaS被认为是云计算的一部分&#xff0c;其他包括基础设施即服务(IaaS)、平台即服务(PaaS)、桌面即服务(DaaS)、托管软件即服务(MSaaS)、移动后端即服务(MBaaS)、数据中心即服务(DCaaS)、集成平台即服务(iPaaS)和信息技术管理即服务(ITMaaS) SaaS应用程序通常由web浏…...

unity 实现使用三张图片来表达车速,通过传值达到车速

//速度 public Image SpeedNums_Unit; public Image SpeedNums_Ten; //public Image SpeedNums_Hundred; //kw public Image MileageNums_Unit; public Image MileageNums_Ten; /// /// 仪表速度UI /// private void SpeedUI(string speedStr) {if (SpeedNums_Unit == null) …...

程序员看过都说好的资源网站,你值得拥有。

程序员必备的相关资源网站一.技术社区1.GitHub2.Gitee&#xff08;码云&#xff09;3.稀土掘金4.OSCHINA开源中国5.CSDN6.博客园7.SegmentFault&#xff08;思否&#xff09;8.Stack Overflow9.Golang中文社区10.ChinaUnix11.51CTO12.Ruby China二.技术教程1.Devdocs2.码农教程…...

【MySQL高级篇】第03章 用户与权限管理

第03章 用户与权限管理 1. 用户管理 1.1 登录MySQL服务器 启动MySQL服务后&#xff0c;可以通过mysql命令来登录MySQL服务器&#xff0c;命令如下&#xff1a; mysql –h hostname|hostIP –P port –u username –p DatabaseName –e "SQL语句"-h参数后面接主机…...

MySQL的分库分表?通俗易懂

1- 为什么要分库分表 如果一个网站业务快速发展&#xff0c;那这个网站流量也会增加&#xff0c;数据的压力也会随之而来&#xff0c;比如电商系统来说双十一大促对订单数据压力很大&#xff0c;Tps十几万并发量&#xff0c;如果传统的架构&#xff08;一主多从&#xff09;&a…...

elasticsearch 查询语法

match_all 查询所有 GET test/_search {"query": {"match_all": {}} }match 单字段匹配查询 GET test/_search {"query":{"match":{"name":"zhangsan"}} }multi_match 多字段匹配查询 GET test/_search {"…...

深入剖析MVC模型与三层架构

MVC&#xff08;Model-View-Controller&#xff09;模型和三层架构都是常见的软件架构模式&#xff0c;用于实现大型应用程序和软件系统。下面是对它们的深入剖析&#xff1a; MVC模型 MVC模型是一种将应用程序分成三个主要组件的软件架构模式&#xff0c;分别是模型&#xf…...

使用 Wall 搭建个人照片墙和视频墙

下载 Github:https://github.com/super-tongyao/wall 国内仓库&#xff08;不推荐&#xff0c;只做加速访问&#xff0c;无编译包和发行版&#xff0c;以github仓库为准&#xff09;&#xff1a;https://gitee.com/Super_TongYao/wall 推荐github仓库&#xff0c;下载最新版…...

03_Linux压缩解压,用户用户组,文件权限

目录 Linux下常用的压缩格式 gzip 压缩工具 gzip 对文件夹进行压缩 bzip2 压缩工具 tar打包工具 对.tar.bz2 进行压缩和解压缩 对.tar.gz 进行压缩和解压缩 rar格式 zip格式 Linux用户 Linux用户组 创建用户和用户组 Linux文件权限 Linux文件权限修改 Linux下常用…...

实测:用GPT-4和KernelBench自动生成CUDA内核,效果到底如何?

实测&#xff1a;GPT-4与KernelBench自动生成CUDA内核的实战效果分析 当我在深夜调试一个矩阵乘法的CUDA内核时&#xff0c;第17次尝试依然无法突破PyTorch原生实现的性能。这种场景对GPU开发者来说再熟悉不过——我们总在手工优化与开发效率之间寻找平衡。而当我第一次听说可以…...

Java Eclipse JDK 1.8.0_25安装与配置全指南

1. JDK 1.8.0_25的下载与安装 如果你是刚接触Java开发的新手&#xff0c;可能会被各种版本的JDK搞得一头雾水。别担心&#xff0c;JDK 1.8.0_25&#xff08;也就是Java 8的一个子版本&#xff09;至今仍是企业开发中最常用的稳定版本之一。我当年刚开始学Java时&#xff0c;导师…...

零基础入门:5分钟学会用Ollama运行Granite-4.0-H-350M文本生成

零基础入门&#xff1a;5分钟学会用Ollama运行Granite-4.0-H-350M文本生成 1. 为什么选择Granite-4.0-H-350M Granite-4.0-H-350M是一个轻量级但功能强大的文本生成模型&#xff0c;特别适合初学者和资源有限的用户。它只有3.5亿参数&#xff0c;却能在普通电脑上流畅运行&am…...

3类被90%开发者忽略的农田图像噪声——基于ISO 17202-2标准的Python去噪实战手册

第一章&#xff1a;农田图像噪声的认知革命与ISO 17202-2标准全景解读传统农业视觉系统长期将图像噪声视为需“压制”的干扰项&#xff0c;而ISO 17202-2:2023《农业遥感图像质量评估—第2部分&#xff1a;噪声建模与语义敏感性分级》首次确立噪声作为农田场景的**可解释性特征…...

OpenClaw浏览器自动化:GLM-4.7-Flash驱动的智能搜索与数据采集

OpenClaw浏览器自动化&#xff1a;GLM-4.7-Flash驱动的智能搜索与数据采集 1. 为什么需要浏览器自动化助手 上周我需要做一个小型市场调研&#xff0c;收集20家竞品的产品定价和功能列表。手动打开每个网站、复制粘贴数据、整理成表格&#xff0c;花了整整一个下午。这种重复…...

告别代码噩梦:用Awesome-Dify-Workflow零代码30分钟实现企业级登录系统

告别代码噩梦&#xff1a;用Awesome-Dify-Workflow零代码30分钟实现企业级登录系统 【免费下载链接】Awesome-Dify-Workflow 分享一些好用的 Dify DSL 工作流程&#xff0c;自用、学习两相宜。 Sharing some Dify workflows. 项目地址: https://gitcode.com/GitHub_Trending/…...

Abaqus数值模拟案例研究:随机纤维分布二维RVE模型中的微观横向拉伸损伤与延性损伤评估

abaqus数值模拟案例系列-随机纤维分布二维RVE模型微观横向拉伸损伤&#xff0c;设置了周期边界&#xff0c;采用Drucker-Prager&#xff08;dp&#xff09;准则&#xff0c;Ductile-Damage延性损伤&#xff0c;界面采用cohesive单元&#xff0c;采用牵引分离方法&#xff0c;Qu…...

OpenClaw技能扩展指南:为百川2-13B添加公众号发布模块

OpenClaw技能扩展指南&#xff1a;为百川2-13B添加公众号发布模块 1. 为什么需要公众号发布技能 上周我正忙着准备一篇技术分享文章&#xff0c;突然意识到一个痛点&#xff1a;每次写完Markdown文档后&#xff0c;手动复制到公众号编辑器、调整格式、上传封面、设置摘要的过…...

Linux核心转储文件生成与调试全指南

1. Linux核心转储文件调试方法详解1.1 核心转储文件概述在Linux系统下&#xff0c;当程序发生崩溃时&#xff0c;系统会生成一个包含程序崩溃时内存映像的文件&#xff0c;称为core文件。这个文件记录了程序崩溃时的内存状态和调试信息&#xff0c;是定位程序崩溃原因的重要工具…...

悬浮门厂家次评:专业视角下的悬浮门(悬航门)品牌解析

悬浮门厂家次评是当前高端出入口领域备受关注的话题&#xff0c;随着各类园区、机关单位、学校等场景对安防与形象要求的提升&#xff0c;悬浮门&#xff08;悬航门&#xff09;凭借其平稳运行、静音美观、抗风稳固等特性&#xff0c;逐渐成为大门采购的主流选择。本文基于行业…...