在initramfs中看到左手分配中无名括号的机制是什么?

时间:2016-07-31 23:55:25

标签: c linux open-source

我正在浏览Linux源代码,我在initramfs的第400行遇到了一段不熟悉的代码。我知道括号中的名字是188的枚举中的状态。在我看来,这是一个默认的数组设置函数指针(我可能是错的)。

我不明白括号的用途是什么,用例是什么?我也发现等号令人困惑。另外,我想知道代码实现的模式是否有通用名称。

import * as types from '../constants/constants';
import Immutable from 'immutable';

const initialState = Immutable.Map({});

export default function boardReducer(state = initialState, action) {
    switch (action.type) {
        default:
            return state;
    }
}

方;为一个天真/一般的问题道歉,我正在努力扩大我对C.的了解。我搜索并找不到英文源的综合评论版本。

1 个答案:

答案 0 :(得分:2)

变量actions是一个数组,使用方括号[]用于指示符,即告诉编译器正在初始化数组的索引。 / p>

根据C11规范(§6.7.9/ 6):

  

如果指定人员的表格为

[ constant-expression ]
     

然后当前对象(下面定义)应具有数组类型,表达式应为整数常量表达式。如果数组的大小未知,则任何非负值都有效。

枚举标识符计为constant-expression

这意味着你可以做一些像这个愚蠢的例子:

#include <stdio.h>

int main(void)
{
    int array[] = {
       [2] = 0,    // Initialize array[2] to 0
       [0] = 2,    // Initialize array[0] to 2
       [1] = 1     // Initialize array[1] to 1
    };

    for (size_t i = 0; i < (sizeof array / sizeof array[0]); ++i)
        printf("array[%d] = %d\n", i, array[i]);

    return 0;
}

上面的程序应该打印

array[0] = 2
array[1] = 1
array[2] = 0