Aus der sys.c- Zeile 123:
void *sys_call_table[__NR_syscalls] =
{
[0 ... __NR_syscalls-1] = sys_ni_syscall,
#include <asm/unistd.h>
};
sys_call_table
ist ein generischer Zeiger auf Arrays, das kann ich sehen. Was ist jedoch die Notation:
[0 ... __NR_syscalls-1]
Was ist das ...
?
EDIT:
Ich habe hier einen weiteren C-Trick gelernt: #include <asm/unistd.h>
Wird vorverarbeitet und durch seinen Inhalt ersetzt und zugewiesen [0 ... _NR_syscalls-1]
.
void (*sys_call_table)[__NR_syscalls]
char *argv[]
. Fest.Antworten:
Es handelt sich um eine Initialisierung mit Designated Initializers .
Die bereichsbasierte Initialisierung ist eine gnu gcc-Erweiterung.
Es ist nicht tragbar. Kompilieren mit
-pedantic
mit sag es dir.Wie funktioniert das hier?
Der Präprozessor ersetzt
#include <asm/unistd.h>
durch seinen tatsächlichen Inhalt ( er definiert verschiedene symbolische Konstanten und Typen und deklariert verschiedene Funktionen ) im bereichsbasierten Konstrukt, die dann weiter zum Initialisieren des Array von Zeigern verwendet werden.quelle