Это функция из ISO C99, известная как обозначенные инициализаторы . Он создает массив и инициализирует определенные элементы этого массива, не обязательно первые N по порядку. Это эквивалентно следующему фрагменту:
static __initdata int (*actions[SOME_SIZE])(void);
actions[Start] = do_start;
actions[Collect] = do_collect;
actions[GotHeader] = do_header;
actions[SkipIt] = do_skip;
actions[GotName] = do_name;
actions[CopyFile] = do_copy;
actions[GotSymlink] = do_symlink;
actions[Reset] = do_reset;
За исключением того, что массив будет настолько большим, насколько ему нужно (равным по размеру на единицу больше, чем самый большой индекс), и он может быть статически инициализирован в глобальной области видимости - вы не можете запустить приведенный выше код в глобальной области. Объем.
Это не функция ANSI C89, но GCC предоставляет эту функцию в качестве расширения даже при компиляции кода как C89.