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

时间:2012-03-29 06:41:02

标签: 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 } };

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

Source of the code

2 个答案:

答案 0 :(得分:6)

这是一个名为指定初始化程序的GNU / GCC扩展。您可以在GCC documentation

中找到有关它的更多信息
  

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

答案 1 :(得分:5)

使用 Designated Initializer 完成。

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