Ответ 1
Вы только что столкнулись с использованием назначенных инициализаторов. Они существуют в C99 и также доступны как расширение GCC, широко используемое в коде ядра Linux (среди прочих).
Из документов:
В ISO C99 вы можете указать элементы [массива] в любом порядке, указав индексы массива или имена полей структуры, к которым они применяются, и GNU C разрешает это как расширение в режиме C90. [...]
Чтобы указать индекс массива, напишите '[index] = перед значением элемента. Например,
int a[6] = { [4] = 29, [2] = 15 };
эквивалентно:
int a[6] = { 0, 0, 15, 0, 29, 0 };
[...]
Альтернативный синтаксис для этого, который был устаревшим, поскольку GCC 2.5, но GCC по-прежнему принимает, должен написать '[index] перед значением элемента, без' =.
На простом английском языке syscalls
является статическим массивом указателя на функцию, принимающую void
и возвращающую int
. Индексы массива являются константами, и их связанное значение является соответствующим адресом функции.