c - 如何在 C 中将数组大小放入数组初始值设定项本身?

标签 c arrays initializer

我有一个在通信协议(protocol)中使用的数组(USB 设备描述符)。该协议(protocol)要求数组头中包含数组大小。所以我想这样做(这是禁止的):

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

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

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

最佳答案

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

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

关于c - 如何在 C 中将数组大小放入数组初始值设定项本身?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16286690/

相关文章:

c++ - 如何为模板类的成员函数定义静态数组?

c++ - 初始化一个容器,它是一个类的私有(private)成员变量

python - 多个构造函数 : the Pythonic way?

c - 使用数组作为 c 中结构体的元素来初始化结构体数组

c - 这个包含 float 变量和 scanf_s 的简单代码有什么问题?

c++ - C 和 C++ 的某些标准之间的差异

python - 为什么调用动态库函数这么慢?

arrays - 创建一个包含在两个边界之间振荡的值的数组

c - c语言编程如何选择指定学分的最佳分数?

ios - 使用可变参数调用 Objective-C 初始化器