我正在尝试执行以下操作,但出现以下错误:
"error: expected expression before
{
token
Test_Stubs.h
#define SIGNATURE 0x78,0x9c
测试.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
关于c - 在 C 中声明后初始化数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31405696/