在C中声明后初始化数组

时间:2015-07-14 11:46:57

标签: c macros

我正在尝试执行以下操作但收到以下错误:

  

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

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既不是数组也不是指针。

1 个答案:

答案 0 :(得分:5)

根据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