101 votes

Quel est ce style de syntaxe en C?

À partir de sys.c ligne 123:

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 pour les tableaux, je peux voir que. Cependant, ce qui est la notation:

[0 ... __NR_syscalls-1]

Quel est le ...?


EDIT:
J'ai appris un autre truc C ici: #include <asm/unistd.h> seront prétraitées et remplacé par son contenu et affectée à l' [0 ... _NR_syscalls-1].

90voto

Alok Save Points 115848

Il est d'initialisation à l'aide de Désigné les Initialiseurs.

La gamme en fonction d'initialisation est une distribution gnu gcc extension.

Pour initialiser un ensemble d'éléments de même valeur, écrire [first ... last] = value. C'est une extension GNU. Par exemple,

 int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 };

Il n'est pas portable. Compilation avec -pedantic avec vous le dire.

Comment ça marche ici?
Le préprocesseur remplace #include <asm/unistd.h> avec son contenu réel(il définit les diverses constantes symboliques et types, et déclare fonctions diverses) dans la plage de base de construction, qui sont ensuite utilisées pour l'initialisation de la matrice de pointeurs.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X