在C中溢出枚举类型?

在C中溢出枚举类型?,第1张

概述如果我有枚举类型,例如: enum week {sunday = 0,星期一,星期二,星期三,星期四,星期五,星期六}; 我有: enum week day;day = saturday;day++; 什么是一天的价值? 枚举类型本质上是一个命名的整数值.该枚举类型与可以表示所有命名值的基础整数类型相关联.该底层整数类型需要能够表示所有唯一的命名值,但其实际类型是实现定义的. 在这种情况下,s 如果我有枚举类型,例如:

enum week {sunday = 0,星期一,星期二,星期三,星期四,星期五,星期六};

我有:

@H_301_6@enum week day;day = saturday;day++;

什么是一天的价值?

解决方法 枚举类型本质上是一个命名的整数值.该枚举类型与可以表示所有命名值的基础整数类型相关联.该底层整数类型需要能够表示所有唯一的命名值,但其实际类型是实现定义的.

在这种情况下,saturday的数值将为6.增加它将给出数值7.实际上,这不太可能溢出底层整数类型(int,char,unsigned char或编译器选择的任何东西),所以使用%d格式打印值将打印7.

但是,枚举周类型的枚举(命名)值没有值,值为7.

如果递增枚举值会溢出底层整数类型(这不是这里的情况),结果是未定义的.这是因为底层整数类型可以是有符号或无符号的,并且溢出有符号整数类型会给出未定义的行为.

从理论上讲,编译器可能使用枚举周的基础类型,只能表示值0到6 – 在这种情况下,递增星期六会给出未定义的行为.在实践中,AFAIK还没有任何C编译器不选择基础类型作为标准整数类型之一(char,int,unsigned char,unsigned等).所有这些类型都可以表示7的数值.

总结

以上是内存溢出为你收集整理的在C中溢出枚举类型?全部内容,希望文章能够帮你解决在C中溢出枚举类型?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1241741.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存