以前从未见过在Linux内核源代码中找到的初始化结构数组的C方法
上面的代码片段显示了我在Linux内核源代码中找到的结构数组的初始化。我以前从未见过这种形式的初始化,我无法自己模拟同样的事情。我到底错过了什么以前从未见过在Linux内核源代码中找到的初始化结构数组的C方法,c,linux,arrays,struct,C,Linux,Arrays,Struct,上面的代码片段显示了我在Linux内核源代码中找到的结构数组的初始化。我以前从未见过这种形式的初始化,我无法自己模拟同样的事情。我到底错过了什么 这是通过使用来完成的 它是一个gcc扩展,不是标准的c构造。使用它会产生不可移植的代码,因此避免使用此类编译器扩展,除非可移植性是您最不关心的问题。它是一种称为指定初始值设定项的GNU/GCC扩展。您可以在中找到有关它的更多信息 要将一系列元素初始化为相同的值,请写入[first…last]=value。这是一个GNU扩展 为什么是C++标签?Linu
这是通过使用来完成的
它是一个gcc扩展,不是标准的c构造。使用它会产生不可移植的代码,因此避免使用此类编译器扩展,除非可移植性是您最不关心的问题。它是一种称为指定初始值设定项的GNU/GCC扩展。您可以在中找到有关它的更多信息 要将一系列元素初始化为相同的值,请写入
[first…last]=value
。这是一个GNU扩展
为什么是C++标签?Linux内核不使用C++。应该是一个扩展特性。Linux内核使用大量的GCC特定扩展。请参阅,例如,仅为了准确起见,指定的初始值设定项不是GCC扩展(),但范围语法是。
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 } };