À partir de la ligne 123 de sys.c :
void *sys_call_table[__NR_syscalls] =
{
[0 ... __NR_syscalls-1] = sys_ni_syscall,
#include <asm/unistd.h>
};
sys_call_table
est un pointeur générique vers des tableaux, je peux le voir. Cependant quelle est la notation:
[0 ... __NR_syscalls-1]
Quel est le ...
?
EDIT:
J'ai appris une autre astuce C ici: #include <asm/unistd.h>
sera prétraité et remplacé par son contenu et assigné à [0 ... _NR_syscalls-1]
.
void (*sys_call_table)[__NR_syscalls]
char *argv[]
. Fixé.Réponses:
Il s'agit d'une initialisation à l'aide d'initialiseurs désignés .
L'initialisation basée sur la plage est une extension gnu gcc.
Ce n'est pas portable. Compiler avec
-pedantic
avec vous le dis.Comment ça marche ici?
Le préprocesseur remplace
#include <asm/unistd.h>
par son contenu réel ( il définit diverses constantes et types symboliques et déclare des fonctions diverses ) dans la construction basée sur la plage, qui est ensuite utilisée pour initialiser le tableau de pointeurs.la source