在 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
我正在尝试执行以下操作,但出现以下错误:
"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