我正在尝试执行以下操作但收到以下错误:
"错误:
{
令牌之前的预期表达式
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既不是数组也不是指针。
答案 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