假设我们有两种结构类型,如下所示:
struct A {
int a;
}
struct B {
int b;
int c;
}
是否可以使用指定的初始化程序初始化一个灵活长度的数组以包含 A 和 B 的实例,例如:
<sometype> my_array[] = {
((struct A){ .a = 10, }),
((struct B){ .b = 1, .c = 5, }),
};
而且由于我需要知道数组中元素的类型,因此在结构之前放置一些字符的方法也很好。:)
我知道这看起来非常糟糕,但我正在尝试将一些类似字节码的数据结构打包在一起,这看起来像是一种定义它们的优雅方式(好吧,至少在一些宏的帮助下)。
编辑:澄清几点:
- 动态分配不是一种选择
- 联合也不是 - 我希望元素完全占据其类型所需的空间
- 根据http://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html ,问题中的“可变长度数组”可能具有误导性 - 确切的名称将是“可变长度数组” 。理想情况下,示例代码是我希望它的样子。
所以我基本上想要的是能够将一些任意的结构化数据打包到在二进制文件的 .data 段中分配的内存区域中。我不需要随机访问元素,只需要从结构中打包数据 - 在我的示例中使用灵活长度数组是因为这个结构似乎与我想要实现的最接近。但是声明可以是其他任何可以完成工作的东西(除了汇编程序,我需要保留 C 的可移植性)。