返回介绍

2.8 结构体文本

发布于 2020-09-09 22:55:43 字数 1063 浏览 1287 评论 0 收藏 0

结构体文本在语法上类似于C语言的初始化设置。结构体文本必须具有一个类型,无论是通过上下文关联还是通过强制类型转换。

typedef struct {
    int a;
    shortreal b;
} ab;

ab c;
c = {0, 0.0}; // 结构体文本的类型由左侧关联文(c)确定

嵌套花括号必须能够反映结构体的结构,例如:

ab abarr[1:0] = {{1, 1.0}, {2, 2.0}};

注意:C语言中可以使用的{1, 1.0, 2, 2.0}在SystemVerilog中是不允许使用的。

结构体文本还可以使用成员名和值,或者是数据类型和缺省值(参见7.14节):

c = {a:0, b:0.0};  // 成员名及成员名的值
c = {default:0};   // 结构体c的所有元素均被设置成0
d = ab'{int:1, shortreal:1.0};  // 数据类型以及这种类型的所有成员的缺省值

当一个结构体数组被初始化的时候,嵌套括号必须能够反映数组和结构体,例如:

ab abarr[1:0] = {{1, 1.0}, {2, 2.0}};

复制操作符可以用来为完全相同数目的成员设置值,复制表达式中内层括号对会被移除。

struct {
    int X, Y, X;
} XYZ = {3{1}};

typedef struct {
    int a, b[4];
} ab_t;

int a, b, c;
ab_t v1[1:0][2:0];
v1 = {2{{3{a,{2{b,c}}}}}};
    /* 扩展成{{3{{a,{2{b,c}}}}},{3{{a,{2{b,c}}}}}} */
    /* 扩展成{{{a,{2{b,c}}},{a,{2{b,c}}},{a,{2{b,c}}}},
              {{a,{2{b,c}}},{a,{2{b,c}}},{a,{2{b,c}}}}}*/
    /* 扩展成{{{a,{b,c,b,c}},{a,{b,c,b,c}},{a,{b,c,b,c}}},
         {{a,{b,c,b,c}},{a,{b,c,b,c}},{a,{b,c,b,c}}}}*/

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

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

发布评论

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