C 忽略结构体前面的 const 限定符

标签 c keil

我正在尝试创建一个 const 结构数组,但我不断得到

error initializer element is not a compile time constant

我使用的是keil IDE。 这很奇怪,因为我的结构是 const,这是一个示例:

typedef const struct{
     CRGB color;  // CRGB is another struct
     void (*myfunc)(int);
}myProfile;


myProfile profile1 = { ....... }; // initialized struct

myProfile profiles[1] = { profile1 }; // error occurs here

即使我使用 const myProfile profile1 = { ..... }; 初始化结构体时,我仍然遇到相同的错误。

我可以找到解决办法,但我真的很想了解发生了什么。谢谢。

最佳答案

发生错误的原因是您尝试使用变量初始化数组,该变量不是常量(=编译时已知的固定值),正如 M.M 在评论中提到的那样。

如果你想为你的结构创建一个默认值,你可以这样做 here .

基于该答案,您可以使用以下内容初始化一个表:

MyStruct instances[2] = {MyStruct_default, MyStruct_default};

这是一个快捷方式:

MyStruct instances[2] = { {.id = 3}, {.id = 3} };

请注意,对于由多个成员组成的结构,可以保留一些空白,并且大多数情况下应将它们设置为 0。

关于C 忽略结构体前面的 const 限定符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52978649/

相关文章:

c - 取消引用中的 de- 前缀是什么意思?有语言解释吗?

c - SDL2 DestroyRenderer SEGFAULT

c - 段错误(核心已转储)

c++ - 链接器如何知道外部函数的定义在哪里?

c - AT91sam7x 256 : Interrupt just run once

c - ADC 中断未被调用

debugging - 在Keil uVision 5中,如何在逐步通过调试器时使文本编辑器行保持最新状态?

c - 在函数参数列表中重用变量

c - 如何使用设备树在一个 Linux 内核驱动程序中映射两个设备的资源?

c - 如何在 ARM7 中进行原子比较和交换?