在C中声明后初始化数组

ILo*_*oon 1 c macros

我试图执行以下操作但收到以下错误:

"错误:{令牌之前的预期表达

Test_Stubs.h

#define SIGNATURE 0x78,0x9c
Run Code Online (Sandbox Code Playgroud)

TEST.C

#include "Test_Stubs.h"

static unsigned myArray[100];

static void
setup(void)
{
    myArray = {SIGNATURE};
}
Run Code Online (Sandbox Code Playgroud)

编辑

关注问题:

有没有办法在#definemyArray的特定索引中分配单个值?例如...

#include "Test_Stubs.h"

static unsigned myArray[100];

static void
setup(void)
{
    myArray[0] = SIGNATURE[0]; //0x78
    myArray[1] = SIGNATURE[1]; //0x9c
}
Run Code Online (Sandbox Code Playgroud)

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

Sou*_*osh 5

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

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


编辑:

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

但是,使用复合文字(在上面和上面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;
}
Run Code Online (Sandbox Code Playgroud)

看到 LIVE VERSION