Ответ 1
Инициализация выполняется с помощью назначенных инициализаторов.
Инициализация на основе диапазона - расширение gnu gcc.
Чтобы инициализировать диапазон элементов для одного и того же значения, напишите
[first ... last] = value
. Это расширение GNU. Например,int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 };
Не переносится. Компиляция с помощью -pedantic
с сообщением об этом.
Как это работает?
Препроцессор заменяет #include <asm/unistd.h>
своим фактическим содержимым (он определяет разные символические константы и типы и объявляет разные функции) в конструкции на основе диапазона, которые затем используются далее для инициализации массива указателей.