Lo más probable es que sea una extensión del compilador que le permite inicializar entradas de matriz específicas (en índices dados) sin completar el resto.
Alexey Frunze
Respuestas:
81
Significa inicializar el n -ésimo elemento de la matriz. El ejemplo que ha dado significará que:
Básicamente, le permite establecer valores específicos en una matriz y dejar el resto como valores predeterminados.
En este caso particular, los índices de la matriz son los códigos de exploración del teclado. 0x3aes el código de escaneo en el conjunto # 1 (ver sección 10.6) para la CapsLockclave, 0x45es NumLocky 0x46 es ScrollLock.
En el primer enlace de arriba, dice que:
int a[6] = { [4] = 29, [2] = 15 };
es equivalente a:
int a[6] = { 0, 0, 15, 0, 29, 0 };
Curiosamente, aunque el enlace indica que =es necesario, ese no parece ser el caso aquí.
Básicamente, inicializa partes de una matriz, por ejemplo;
int aa[4] = { [2] = 3, [1] = 6 };
Inicializa el segundo valor de la matriz a 6 y el tercero a 3.
En su caso, las compensaciones de la matriz están en hexadecimal (0x3a), lo que inicializa el elemento 58 de la matriz al valor de CAPSLOCK, que presumiblemente se define en el código sobre el código que está mostrando.
La versión en su código sin =parece ser una extensión específica de gcc.
Respuestas:
Significa inicializar el n -ésimo elemento de la matriz. El ejemplo que ha dado significará que:
togglecode[0x3A] == CAPSLOCK togglecode[0x45] == NUMLOCK togglecode[0x46] == SCROLLLOCK
Estos se denominan "inicializadores designados" y en realidad forman parte del estándar C99. Sin embargo, la sintaxis sin
=
no es. De esa página:fuente
Según los documentos de GCC, esto es compatible con ISO C99. Se refieren a él como "Inicializadores designados":
Nunca había visto esta sintaxis antes, pero la compilé con gcc 4.4.5, con -Wall. Se compiló con éxito y no dio advertencias.
Como puede ver en ese ejemplo, le permite inicializar elementos de matriz específicos, dejando los demás intactos.
fuente
Eso se introdujo en C99 y se llama inicializador designado .
Básicamente, le permite establecer valores específicos en una matriz y dejar el resto como valores predeterminados.
En este caso particular, los índices de la matriz son los códigos de exploración del teclado.
0x3a
es el código de escaneo en el conjunto # 1 (ver sección 10.6) para laCapsLock
clave,0x45
esNumLock
y 0x46 esScrollLock
.En el primer enlace de arriba, dice que:
int a[6] = { [4] = 29, [2] = 15 };
es equivalente a:
int a[6] = { 0, 0, 15, 0, 29, 0 };
Curiosamente, aunque el enlace indica que
=
es necesario, ese no parece ser el caso aquí.fuente
Es (cercano a) la sintaxis de los inicializadores designados , una característica de C99.
Básicamente, inicializa partes de una matriz, por ejemplo;
int aa[4] = { [2] = 3, [1] = 6 };
Inicializa el segundo valor de la matriz a 6 y el tercero a 3.
En su caso, las compensaciones de la matriz están en hexadecimal (0x3a), lo que inicializa el elemento 58 de la matriz al valor de CAPSLOCK, que presumiblemente se define en el código sobre el código que está mostrando.
La versión en su código sin
=
parece ser una extensión específica de gcc.fuente