Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C11嵌套初始化_C_C11 - Fatal编程技术网

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

在C11中,是否有一种方法可以创建嵌套初始化以实现我在“测试集”中概述的目标

到目前为止,谷歌搜索嵌套C11初始化尚未显示任何示例

也许这是不可能的

我已经走了这么远,但我无法让它发挥作用

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数组成员,只是它的尾部填充可能比 这一遗漏意味着。但是,当
(或
->
)运算符的左操作数为 (指向)具有灵活数组成员和正确操作数名称的结构 成员,其行为就好像该成员被替换为最长的数组(具有相同的 元素类型),不会使结构大于正在访问的对象;这个 阵列的偏移量应保持柔性阵列构件的偏移量,即使这会有所不同 从替换阵列的。如果这个数组没有元素,它的行为就像 它只有一个元素,但如果试图访问该元素,则行为未定义 元素或来生成一个指针,该指针超过它一个