C数组结构声明

时间:2015-11-17 18:33:09

标签: c arrays struct

在Linux内核中,我看到一个结构数组的声明,看起来像这个

struct SomeStructName [] ={
[SOMEWEIRD_NAME] = {
                   .field1 = "some value"
                   },
[SOMEWEIRD_NAME2] = {
                   .field1 = "some value1"
                   },
}

我从未见过这样的声明,特别是我无法弄清[SOMEWEIRD_NAME]的含义,以及为什么使用它。

3 个答案:

答案 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,或者是枚举,其数值是它在枚举中的位置。