Il s'agit très probablement d'une extension de compilateur qui vous permet d'initialiser des entrées de tableau spécifiques (à des indices donnés) sans remplir le reste.
Alexey Frunze
Réponses:
81
Cela signifie initialiser le n -ième élément du tableau. L'exemple que vous avez donné signifiera que:
Ceux-ci sont appelés «initialiseurs désignés» et font en fait partie de la norme C99. Cependant, la syntaxe sans le =n'est pas. À partir de cette page:
Une autre syntaxe pour cela qui est obsolète depuis GCC 2.5 mais que GCC accepte toujours est d'écrire [index]avant la valeur de l'élément, sans =.
Selon la documentation du GCC, il est conforme à la norme ISO C99. Ils y font référence sous le nom de «Initialzers désignés»:
Pour spécifier un index de tableau, écrivez `[index] = 'avant 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 auparavant, mais je l'ai juste compilée avec gcc 4.4.5, avec -Wall. Il a été compilé avec succès et n'a donné aucun avertissement.
Comme vous pouvez le voir dans cet exemple, il vous permet d'initialiser des éléments de tableau spécifiques, en laissant les autres inchangés.
Il vous permet essentiellement de définir des valeurs spécifiques dans un tableau avec le reste par défaut.
Dans ce cas particulier, les index du tableau sont les codes de balayage du clavier. 0x3aest le code de balayage dans l'ensemble n ° 1 (voir section 10.6) pour la CapsLockclé, 0x45est NumLocket 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 };
Fait intéressant, bien que le lien indique que cela =est nécessaire, cela ne semble pas être le cas ici.
Fondamentalement, il initialise des parties d'un tableau, par exemple;
int aa[4] = { [2] = 3, [1] = 6 };
Initialise la deuxième valeur du tableau à 6 et la troisième à 3.
Dans votre cas, les décalages du tableau se trouvent être en hexadécimal (0x3a), ce qui initialise le 58e élément du tableau à la valeur de CAPSLOCK qui est vraisemblablement définie dans le code au-dessus du code que vous affichez.
La version de votre code sans le =semble être une extension spécifique à gcc.
Réponses:
Cela signifie initialiser le n -ième élément du tableau. L'exemple que vous avez donné signifiera que:
togglecode[0x3A] == CAPSLOCK togglecode[0x45] == NUMLOCK togglecode[0x46] == SCROLLLOCK
Ceux-ci sont appelés «initialiseurs désignés» et font en fait partie de la norme C99. Cependant, la syntaxe sans le
=
n'est pas. À partir de cette page:la source
Selon la documentation du GCC, il est conforme à la norme ISO C99. Ils y font référence sous le nom de «Initialzers désignés»:
Je n'ai jamais vu cette syntaxe auparavant, mais je l'ai juste compilée avec gcc 4.4.5, avec -Wall. Il a été compilé avec succès et n'a donné aucun avertissement.
Comme vous pouvez le voir dans cet exemple, il vous permet d'initialiser des éléments de tableau spécifiques, en laissant les autres inchangés.
la source
Cela a été introduit dans C99 et cela s'appelle un initialiseur désigné .
Il vous permet essentiellement de définir des valeurs spécifiques dans un tableau avec le reste par défaut.
Dans ce cas particulier, les index du tableau sont les codes de balayage du clavier.
0x3a
est le code de balayage dans l'ensemble n ° 1 (voir section 10.6) pour laCapsLock
clé,0x45
estNumLock
et 0x46 estScrollLock
.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 };
Fait intéressant, bien que le lien indique que cela
=
est nécessaire, cela ne semble pas être le cas ici.la source
C'est (proche de) la syntaxe des initialiseurs désignés , une fonctionnalité C99.
Fondamentalement, il initialise des parties d'un tableau, par exemple;
int aa[4] = { [2] = 3, [1] = 6 };
Initialise la deuxième valeur du tableau à 6 et la troisième à 3.
Dans votre cas, les décalages du tableau se trouvent être en hexadécimal (0x3a), ce qui initialise le 58e élément du tableau à la valeur de CAPSLOCK qui est vraisemblablement définie dans le code au-dessus du code que vous affichez.
La version de votre code sans le
=
semble être une extension spécifique à gcc.la source