gpt4 book ai didi

c - "Array index in initialiser exceeds array bounds"

转载 作者:行者123 更新时间:2023-11-30 15:08:51 26 4
gpt4 key购买 nike

我想利用 C99 指定的数组初始化程序来帮助使我的代码更加自记录,但我遇到了下面描述的问题。

假设我有一个枚举和一个将枚举映射到其他有用数据结构的数组,例如:

enum { STATE_IDLE = 0, STATE_WORKING, STATE_PANIC };
int32_t const g_stress_levels[3] = {
[STATE_IDLE] = 10,
[STATE_WORKING] = 40,
[STATE_PANIC] = 90
};

使用 TDM-GCC-32 gcc 4.8.1 和 -std=c99 编译上述内容,不会出现任何警告。下面的代码片段不会,而是会引发错误“初始化程序中的数组索引超出数组边界”。

enum { STATE_IDLE = 0, STATE_WORKING, STATE_PANIC, TOTAL_STATES };
int32_t const g_stress_levels[TOTAL_STATES] = {
[STATE_IDLE] = 10,
[STATE_WORKING] = 40,
[STATE_PANIC] = 90
};

The GCC docs状态“索引值必须是常量表达式,即使正在初始化的数组是自动的”。然而,我一直认为 enum 是一个常量表达式,那么为什么会出现这种情况呢?

最佳答案

代码运行良好,符合预期*:

gsamaras@gsamaras-A15:~$ cat px.c
#include <stdint.h>

enum { STATE_IDLE = 0, STATE_WORKING, STATE_PANIC, TOTAL_STATES };
int32_t const g_stress_levels[TOTAL_STATES] = {
[STATE_IDLE] = 10,
[STATE_WORKING] = 40,
[STATE_PANIC] = 90
};

int main(void) {
return 0;
}
gsamaras@gsamaras-A15:~$ gcc -Wall -std=c99 -o px px.c
gsamaras@gsamaras-A15:~$

问题一定出在其他地方。您还现场查看here .

*<子> Can enum member be the size of an array in ANSI-C?

关于c - "Array index in initialiser exceeds array bounds",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37099427/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com