Я думаю, что этот синтаксис был введен в C99, хотя в кратком обзоре Google я не могу найти ничего определенного.В любом случае, в старых диалектах Си, если вы хотите явно инициализировать, например, 3-й элемент массива, вы должны были явно перечислить нули для предыдущих элементов.Т.е.
int foo[4] = { 0, 0, 0, 42 }; // the 42 is arbitrary
В современном C вы можете ввести это вместо:
int foo[4] = { [3] = 42 };
Синтаксис немного неясен, но, думаю, интуиция заключается в том, что выВыполнение примерно эквивалентно времени компиляции:
int foo[4];
foo[3] = 42;
Примерно очень, пример кода эквивалентен
struct Segdesc gdt[(GD_TSS0 >> 3) + 1];
gdt[0] = SEG_NULL;
gdt[GD_KT >> 3] = ...;
...
gdt[GD_TSS0 >> 3 ] = ...;
Преимущество этого синтаксиса в том, что вы можете сделать его более краткимредко инициализировать массив, без необходимости считать элементы массива, чтобы получить те, которые вы хотите установить в правильных местах.Кроме того, этот синтаксис может быть применен к инициализации статического массива.