如何在C语言中将数组大小放入数组初始化器本身?

时间:2013-04-29 19:29:11

标签: c arrays initializer

我有一个用于通信协议(USB设备描述符)的数组。此协议调用数组头中的数组大小。所以我想这样做(这是禁止的):

static uint8_t array[]= {
    TYPE,
    sizeof(array),
    other data...
};

数组位于内存的只读部分,事实上我不能覆盖相关的单元格,而且我真的不愿意复制它来覆盖单元格(它在最小的嵌入式系统中)。我需要它看起来像“在线上”,因为它将通过DMA。

是否有某种神奇可以解决这个限制?我愿意使用C99或GNU扩展。我不会仅仅为此而改变,但我也对C ++解决方案感到好奇。

1 个答案:

答案 0 :(得分:3)

如果您不使用数组,而是使用它看起来像您真正想要的结构,那么它将是可能的:

typedef struct
{       int     type, size, other;
} pack_t;
static pack_t a =
{       10, sizeof(a), 11
};