在Linux内核中,我看到一个结构数组的声明,看起来像这个
struct SomeStructName [] ={
[SOMEWEIRD_NAME] = {
.field1 = "some value"
},
[SOMEWEIRD_NAME2] = {
.field1 = "some value1"
},
}
我从未见过这样的声明,特别是我无法弄清[SOMEWEIRD_NAME]
的含义,以及为什么使用它。
答案 0 :(得分:5)
数组的C99 designated initializer 。
例如:
/*
* Initialize element 0 to 1
* 1 to 2
* 2 to 3
* 255 to 1
* and all other elements to 0
*/
int arr[256] = {[0] = 1, 2, 3, [255] = 1};
它允许您以任何顺序初始化某些特定的数组元素,并允许您省略一些元素。
在您的示例中,[]
之间的表达式可以是整数常量表达式的宏名称或enum
常量。它不能是变量名,因为它必须是整数常量表达式。
答案 1 :(得分:2)
我不确定你的意思,但我认为SOMEWEIRD_NAME
是一个定义值。
定义是一种赋予值另一个名称的方法,但它不会占用你的空间,并且在运行时记忆,它会被替换,无论在编译过程中你的代码中是否写入了定义值的名称。< / p>
deifne的语法如下:#define NAME_OF_DEFINE 80
在以下示例中,代码中的每个NAME_OF_DEFINE
都将替换为值80.请注意,您不应该结束行;
。
在您的示例中,我希望SOMEWEIRD_NAME
有一个numbric值来设置数组的大小。
您可以了解有关#define
here
答案 2 :(得分:1)
“SOMEWEIRD_NAME”很可能是值为数字的#define,或者是枚举,其数值是它在枚举中的位置。