考虑以下代码:
typedef struct Object
{
  uint8_t size;
  uint8_t array[];
}Object;如何使对象具有编译时但用户定义的大小数组?
在阅读了一些堆栈溢出帖子并亲自尝试了代码之后,我现在知道,只要我至少使用编译器标准的C99,我就可以声明具有如下自定义大小的对象:
Object o = {.size = 2, .array = {1, 2}};但是我想要的只是一个具有自定义大小的空数组,而不是键入
Object o = {.size = 5, .array = {1, 2, 3, 4, 5}};我想打个类似的字
Object o = {.size = 5, .array = uint8_t[5]};同样重要的是,我需要在编译时知道数组的大小,不能像malloc那样使用动态内存,所以使用malloc分配的灵活数组成员的典型解决方案不会适用于我。
像这样的解决方案存在吗?
如果它不存在:为什么第一个示例能够工作(对于某些编译器来说),但只是告诉编译器在编译时需要一个10大小的数组,而不初始化其中的值呢?
编辑:我想我应该清楚地表明,我的目标是创建类似于C++ std::array的东西,因为有了这种数据类型,用户就可以选择数组的大小,而不必知道内部的工作原理,并且为每一个新的大小重写结构。
https://stackoverflow.com/questions/74381285
复制相似问题