从未见过C方法初始化Linux内核源代码中发现的结构数组

Koo*_* Ng 6 c linux arrays struct

55 typedef struct pidmap {
56         atomic_t nr_free;
57         void *page;
58 } pidmap_t;
59 
60 static pidmap_t pidmap_array[PIDMAP_ENTRIES] =
61          { [ 0 ... PIDMAP_ENTRIES-1 ] = { ATOMIC_INIT(BITS_PER_PAGE), NULL } };
Run Code Online (Sandbox Code Playgroud)

上面的代码片段显示了我在Linux内核源代码中找到的结构数组的初始化.我之前从未见过这种形式的初始化,我无法自己模拟同样的事情.我到底错过了什么?

代码的来源

Thi*_*ter 6

它是一个名为Designated Initializers的GNU/GCC扩展.您可以在GCC文档中找到有关它的更多信息.

要将一系列元素初始化为相同的值,请写入[first ... last] = value.这是一个GNU扩展

  • 仅仅为了准确性,指定的初始化器不是GCC扩展([见这个问题](http://stackoverflow.com/questions/9849719/what-do-square-brackets-mean-in-array-initialization-in-c )),但范围语法是. (2认同)

Alo*_*ave 5

它是通过使用指定的初始化程序完成的.

它是gcc扩展而不是标准c构造.使用它会导致不可移植的代码,因此请避免使用此类编译器扩展,除非可移植性是您最不关心的问题.