Z linii sys.c 123:
void *sys_call_table[__NR_syscalls] =
{
[0 ... __NR_syscalls-1] = sys_ni_syscall,
#include <asm/unistd.h>
};
sys_call_table
jest ogólnym wskaźnikiem do tablic, widzę to. Jednak jaka jest notacja:
[0 ... __NR_syscalls-1]
Co to jest ...
?
EDYCJA:
Nauczyłem się tutaj innej sztuczki C: #include <asm/unistd.h>
zostanie wstępnie przetworzona i zastąpiona zawartością i przypisana do [0 ... _NR_syscalls-1]
.
void (*sys_call_table)[__NR_syscalls]
char *argv[]
. Naprawiony.Odpowiedzi:
Jest to inicjalizacja przy użyciu wyznaczonych inicjatorów .
Inicjalizacja oparta na zakresie jest rozszerzeniem gnu gcc.
Nie jest przenośny. Kompilując z
-pedantic
z, powiedz ci to.Jak to działa?
Preprocesor zastępuje
#include <asm/unistd.h>
swoją rzeczywistą zawartość ( definiuje różne symboliczne stałe i typy oraz deklaruje różne funkcje ) w konstrukcji opartej na zakresie, które są następnie używane do inicjalizacji tablicy wskaźników.źródło