c - 在 C 中声明后初始化数组

标签 c macros

我正在尝试执行以下操作,但出现以下错误:

"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/

相关文章:

generics - 在 Rust 中使用宏创建 impl-block 的问题

C、clock_gettime,返回了不正确的纳秒值?

c - 为什么我的程序输出在 Windows 中闪烁并关闭?

c - 程序过早离开循环

c - 代表微芯片上的引脚的宏

c++ - 有关 Linux/POSIX 中特定于平台的宏的文档

c - 知道 void * 分配类型的宏

c - 为什么打印带有 %s 的字符会出现段错误?

c - 使用双向链表排序的问题

IOS宏问题