C11嵌套初始化
在C11中,是否有一种方法可以创建嵌套初始化以实现我在“测试集”中概述的目标 到目前为止,谷歌搜索嵌套C11初始化尚未显示任何示例 也许这是不可能的 我已经走了这么远,但我无法让它发挥作用C11嵌套初始化,c,c11,C,C11,在C11中,是否有一种方法可以创建嵌套初始化以实现我在“测试集”中概述的目标 到目前为止,谷歌搜索嵌套C11初始化尚未显示任何示例 也许这是不可能的 我已经走了这么远,但我无法让它发挥作用 typedef struct my_node_successor_struct { char *node_name; float cost; } my_node_successor; typedef struct my_node_successor_set_struct { const c
typedef struct my_node_successor_struct {
char *node_name;
float cost;
} my_node_successor;
typedef struct my_node_successor_set_struct {
const char *successor_name;
my_node_successor *successors[];
} my_node_successor_set;
my_node_successor_set test_successor_set[] = {
{ .node_name = "S", .successors = { { .successor_name = "A", .cost = 2.f}, { .successor_name = "C", .cost = 3.f }, }},
{ .node_name = "A", .successors = { { .successor_name = "B", .cost = 1.f}, { .successor_name = "C", .cost = 1.f }, }},
{ .node_name = "C", .successors = { { .successor_name = "G", .cost = 3.f}, }},
{ .node_name = NULL, NULL },
}) 没有
在结构的末尾有一个灵活的数组成员(它是唯一可以出现的位置)。但是您不能初始化此类结构的数组,也不能合法地创建此类结构的数组(因为数组的所有元素都必须具有相同的大小,并且FAM的点是具有可变的大小,并且在任何情况下,数组不计入大小,因此您只能在FAM数组中拥有零个元素)
标准ISO/IEC 9899:2011的相关章节如下:
§6.7.2.1结构和联合规范
结构或联合体不得包含不完整或功能类型的构件(因此,
结构不应包含自身的实例,但可以包含指向实例的指针
除了具有多个命名成员的结构的最后一个成员
可能有不完整的数组类型;这种结构(以及任何包含
递归地,属于此类结构的构件)不得为结构或结构的构件
数组的元素
作为一种特殊情况,具有多个命名成员的结构的最后一个元素可以
具有不完整的数组类型;这称为灵活数组成员。在大多数情况下,
将忽略灵活数组成员。特别是,结构的大小就像
省略了flexible数组成员,只是它的尾部填充可能比
这一遗漏意味着。但是,当
(或->
)运算符的左操作数为
(指向)具有灵活数组成员和正确操作数名称的结构
成员,其行为就好像该成员被替换为最长的数组(具有相同的
元素类型),不会使结构大于正在访问的对象;这个
阵列的偏移量应保持柔性阵列构件的偏移量,即使这会有所不同
从替换阵列的。如果这个数组没有元素,它的行为就像
它只有一个元素,但如果试图访问该元素,则行为未定义
元素或来生成一个指针,该指针超过它一个