在使用范围时,我无法使用指定的初始化程序语法。我知道数组可以指定初始化程序,我想初始化一个结构数组,以便所有成员在启动时都相同。
编辑:错误是
error: array index range in initializer exceeds array bounds 32 |
[0 ... NODELIST_LEN].dev_status = DW_DEV_DISABLED
typedef struct {
int dev_status;
}DW_data;
typedef struct{
DW_data list[NODELIST_LEN];
}DW_nodelist;
我尝试了以下方法:
DW_nodelist dw_list = {
.list[0 ... NODELIST_LEN].dev_status = DW_DEV_DISABLED
}
DW_nodelist dw_list = {
.list = {
[0 ... NODELIST_LEN].dev_status = DW_DEV_DISABLED
}
}
我什至试了一下这些只是为了笑:
DW_nodelist dw_list = {
.list = {
.dev_status[0 ... NODELIST_LEN] = DW_DEV_DISABLED
}
}
DW_nodelist dw_list = {
.list = [0 ... NODELIST_LEN].dev_status = DW_DEV_DISABLED
}
我做错了什么,这甚至可以用结构数组吗?
最佳答案
您超出了 0 ... NODELIST_LEN
的数组边界。您必须在 NODELIST_LEN - 1
处停止。
以下将起作用:
DW_nodelist dw_list = {
.list[0 ... NODELIST_LEN-1].dev_status = DW_DEV_DISABLED
};
请注意,...
(指定元素范围)的用法是标准 C 不支持的特定于 GCC 的扩展。
如果您使用 -Wpedantic
选项,GCC 编译器会发出警告。
warning: ISO C forbids specifying range of elements to initialize [-Wpedantic] 13 | .list[0 ... NODELIST_LEN-1].dev_status = DW_DEV_DISABLED
关于c - 使用指定的初始化器范围在 C 中初始化结构数组的所有结构成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56146769/