代码之家  ›  专栏  ›  技术社区  ›  Sahas

定义中的方括号

  •  1
  • Sahas  · 技术社区  · 7 年前

    我在浏览Linux内核代码时发现了下面一行。方括号是什么意思?

    #define __BPF_FUNC_STR_FN(x) [BPF_FUNC_ ## x] = __stringify(bpf_ ## x)
    

    来自: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/kernel/bpf/disasm.c#n18

    使用方法如下:

    static const char * const func_id_str[] = {
        __BPF_FUNC_MAPPER(__BPF_FUNC_STR_FN)
    };
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   jxh    7 年前

    在C99中,为指定的初始值设定项引入了语法。方括号语法用于数组初始化。所以这条线:

    int a[] = { [10] = 4 };
    

    将创建一个数组 a 能装11个 int s,并初始化 a[10] 到4,其其余成员初始化为0。