如果还存在非复制元素,我们如何初始化具有复制的结构队列?我尝试了以下方法但没有成功。它甚至可能吗?
typedef struct {
A a;
B b;
C c;
D d;
} lp_s; //A,B,C,D : integer enums
lp_s var_name[$] = '{
'{a: A_VAL0, b: B_VAL1, default:0}
'{15{'{a: A_VAL1, b: B_VAL1, default:0}}},
'{a: A_VAL2, b: B_VAL2, default:0}
};
这里的错误是:
分配模式是非法的,原因是:复制字段超出了 目标的大小
我从复制中删除了勾号。
lp_s var_name[$] = '{
'{a: A_VAL0, b: B_VAL1, default:0}
{15{'{a: A_VAL1, b: B_VAL1, default:0}}},
'{a: A_VAL2, b: B_VAL2, default:0}
};
然后错误变成了:
未打包的类型'lp_s'的结构不能由多个分配 连接运算符{15 {'{a:A_VAL1,b:B_VAL1,默认值:0}}}
但是,可以将赋值模式分配给解压缩的结构。加 '在连接运算符之前将其转换为有效的 任务模式。
或者有没有办法实现使用解压缩的数组连接?
答案 0 :(得分:3)
您可以向分配模式添加显式类型,以便可以在自定义的上下文中使用。
typedef lp_s lp_sq[$];
lp_s vari[$] = { // unpacked array concatenation of struct assignment patterns
lp_s'{a: A_ENUM, b: B_ENUM, C: J_ENUM, D: D_ENUM},
lp_sq'{12{lp_s'{a: A_ENUM, b: B_ENUM, C: J_ENUM, D: D_ENUM}}},
lp_s'{a: A_ENUM, b: B_ENUM, C: J_ENUM, D: D_ENUM }
};
注意,您无法在此使用default:0
,因为0
不是要分配给enum
的有效值类型。