Из строки 123 sys.c :
void *sys_call_table[__NR_syscalls] =
{
[0 ... __NR_syscalls-1] = sys_ni_syscall,
#include <asm/unistd.h>
};
sys_call_table
это общий указатель на массивы, я это вижу. Однако какие обозначения:
[0 ... __NR_syscalls-1]
Что такое ...
?
РЕДАКТИРОВАТЬ: здесь
я узнал еще один трюк на C: #include <asm/unistd.h>
будет предварительно обработан, заменен его содержимым и назначен [0 ... _NR_syscalls-1]
.
void (*sys_call_table)[__NR_syscalls]
char *argv[]
. Исправлена.Ответы:
Это инициализация с использованием назначенных инициализаторов .
Инициализация на основе диапазона - это расширение gnu gcc.
Он не переносится. Компиляция с
-pedantic
помощью говорит вам об этом.Как это здесь работает?
Препроцессор заменяет
#include <asm/unistd.h>
его фактическим содержимым ( он определяет разные символьные константы и типы и объявляет разные функции ) в конструкции на основе диапазона, которая затем используется для инициализации массива указателей.источник