在 C 中声明后初始化数组

Initialize array after declaring in C

我正在尝试执行以下操作,但出现以下错误:

"error: expected expression before { token

Test_Stubs.h

#define SIGNATURE 0x78,0x9c

Test.c

#include "Test_Stubs.h"

static unsigned myArray[100];

static void
setup(void)
{
    myArray = {SIGNATURE};
}

编辑

关注问题:

有没有办法将 #define 中的各个值分配给 myArray 的特定索引?例如...

#include "Test_Stubs.h"

static unsigned myArray[100];

static void
setup(void)
{
    myArray[0] = SIGNATURE[0]; //0x78
    myArray[1] = SIGNATURE[1]; //0x9c
}

显然上面的代码不会编码,因为 SIGNATURE 既不是数组也不是指针。

根据 C 语法规则,您只能在定义时使用大括号括起来的初始化列表来初始化数组。

之后需要逐个元素初始化,使用循环,或者,如果需要将所有元素初始化为相同的值,可以考虑使用memset().


编辑:

不,正如我在评论中提到的,根据您的代码片段,SIGNATURE 既不是数组名称,也不代表任何数组类型,因此您不能对其使用索引。

然而,使用 compound literal(在 C99 之上),如果你改变你的 #define,那么,不知何故,你可以使这项工作。例如,请参见下面的代码,

#include <stdio.h>

#define SIGNATURE ((unsigned [100]){0x78,0x9c})

static unsigned myArray[100];

int main (void)
{
    myArray[0] = SIGNATURE[0]; //0x78
    myArray[1] = SIGNATURE[1]; //0x9c

    return 0;
}

看到一个LIVE VERSION