C数组结构声明

Mic*_*l P 9 c arrays struct

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

struct SomeStructName [] ={
[SOMEWEIRD_NAME] = {
                   .field1 = "some value"
                   },
[SOMEWEIRD_NAME2] = {
                   .field1 = "some value1"
                   },
}
Run Code Online (Sandbox Code Playgroud)

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

oua*_*uah 5

它是C99 指定的数组初始化器.

例如:

/* 
 * 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};
Run Code Online (Sandbox Code Playgroud)

它允许您以任何顺序初始化某些特定的数组元素,并允许您省略一些元素.

在您的示例中,表达式之间的表达式[]可以是整数常量表达式的宏名称或enum常量.它不能是变量名,因为它必须是整数常量表达式.