返回介绍

3.10.3 类型检查

发布于 2020-09-09 22:55:44 字数 833 浏览 1087 评论 0 收藏 0

SystemVerilog枚举类型是一种强类型,因此,一个enum类型的变量不能被直接赋值为一个位于枚举集范围之外的值,除非使用强制类型转换或者除非这个枚举变量是一个联合体的成员。这种强大的类型检查能够防止用户偶然地将枚举类型变量赋值为不存在的值。这个限制仅仅适用于被显式地声明成一个类型的枚举。枚举值仍然可以在表达式中作为常量使用,并且运算结果也可以赋值到任何一个具有兼容的integral类型的变量。

无论是枚举名还是它们的整数值都必须是唯一的。它们的值可以被设置为任意integral常量值,或者从初始值0开始递增。如果将两个值设置到相同的枚举名,或者设置的值与递增值冲突都是错误的。

枚举变量在赋值、传递和关系操作符中进行类型检查。枚举变量可以自动转换成integral值,然而,将任何表达式赋值到枚举变量均要求一个显式的强制类型转换。例如:

typedef enum {red, green, blue, yellow, white, black} Colors;

上面的例子将一个唯一的数值赋值到每一个颜色标识符,并产生一个新的数据类型Colors。接着我们可以产生这种类型的变量。

Colors c;
c = green;
c = 1;      // 无效赋值
if (1==c)   // 有效。c被自动转换成integer

在上面的例子中,值green被赋值到类型为Colors的变量c。第二个赋值是无效的,因为枚举类型必须遵守严格的类型规则。强制类型转换可以将一个不同的数据类型、或超出范围的值赋值到一个枚举类型。强制类型转换将在3.10.4节、3.14节和3.15节中讨论。如果一个枚举变量被赋值为一个超出范围的值,那么之后有关这个枚举变量的任何操作结果都是未定义的。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文