Réponses
Trop de publicités?Cela signifie initialiser le n-ème élément du tableau. L'exemple que vous avez donné signifie que:
togglecode[0x3A] == CAPSLOCK
togglecode[0x45] == NUMLOCK
togglecode[0x46] == SCROLLLOCK
Ceux-ci sont appelés "désigné initialiseurs", et qui font en réalité partie du standard C99. Toutefois, la syntaxe, sans l' =
ne l'est pas. À partir de cette page:
Une syntaxe alternative pour ce qui est obsolète depuis GCC 2.5, mais GCC accepte toujours est-à-écrire
[index]
avant la valeur de l'élément, sans=
.
Selon la GCC docs c'est la norme ISO C99 conforme. Ils se réfèrent à lui comme "Désigné Initialzers":
Pour spécifier un index de tableau, écrire " [indice] =' avant de la valeur de l'élément. Par exemple,
int a[6] = { [4] = 29, [2] = 15 };
est équivalent à
int a[6] = { 0, 0, 15, 0, 29, 0 };
Je n'ai jamais vu cette syntaxe avant, mais j'ai juste compilé avec gcc 4.4.5, avec le Mur. Il compilé avec succès et a donné aucun avertissement.
Comme vous pouvez le voir à partir de cet exemple, il vous permet d'initialiser spécifiques des éléments de tableau, en laissant les autres intacts.
Qui a été introduit en C99 et ça s'appelle un désigné initialiser.
Il permet essentiellement de définir un ensemble de valeurs dans un tableau avec le reste de la gauche en tant que par défaut.
Dans ce cas particulier, les indices de tableau sont le clavier codes de balayage. 0x3a
est le scan de code dans la série #1 (voir la section 10.6) pour l' CapsLock
clé, 0x45
est NumLock
et 0x46 est - ScrollLock
.
Sur le premier lien ci-dessus, il indique que:
int a[6] = { [4] = 29, [2] = 15 };
est équivalent à:
int a[6] = { 0, 0, 15, 0, 29, 0 };
Ce qui est assez intéressant, bien que le lien =
est nécessaire, qui ne semble pas être le cas ici.
C'est (presque) la syntaxe de désigné les initialiseurs, un C99 fonctionnalité.
Fondamentalement, il initialise les parties d'un tableau, par exemple;
int aa[4] = { [2] = 3, [1] = 6 };
Intializes la deuxième valeur de la matrice à 6, et le troisième à 3.
Dans votre cas, le tableau des décalages arrive d'être en hexadécimal (0x3a) qui initialise le 58 ième élément du tableau à la valeur de verrouillage des majuscules qui sans doute est défini dans le code ci-dessus le code dont vous faites preuve.
La version de votre code sans l' =
semble être un gcc extension spécifique.