4 ответов:
Это означает инициализировать n-й элемент массива. Приведенный вами пример будет означать следующее:
togglecode[0x3A] == CAPSLOCK togglecode[0x45] == NUMLOCK togglecode[0x46] == SCROLLLOCKэто называется "назначенные инициализаторы", и на самом деле являются частью стандарта C99. Однако синтаксис без
=нет. С этой страницы:альтернативный синтаксис для этого, который был устаревшим с GCC 2.5, но GCC все еще принимает, это написать
[index]перед значением элемента, с=.
по словам GCC docs это соответствует стандарту ISO C99. Они называют его "назначенные инициализаторы":
чтобы указать индекс массива, напишите `[index] = ' перед значением элемента. Например,
int a[6] = { [4] = 29, [2] = 15 };эквивалентно
int a[6] = { 0, 0, 15, 0, 29, 0 };Я никогда не видел этот синтаксис, но я просто скомпилировал его с помощью GCC 4.4.5, с -стена. Он был успешно скомпилирован и не давал никаких предупреждений.
Как вы можете видеть из в этом примере он позволяет инициализировать определенные элементы массива, оставляя остальные нетронутыми.
это было введено в C99, и это называется места для инициализации тестов.
это в основном позволяет установить определенные значения в массиве с остальными слева по умолчанию.
в данном конкретном случае, индексы массива скан-кодов клавиатуры.
0x3a- это сканировать код в наборе #1 (см. раздел 10.6) для
это (близко к) синтаксис назначенные инициализаторы, а С99 характеристика.
в основном, он инициализирует части массива, например;
int aa[4] = { [2] = 3, [1] = 6 };инициализирует второе значение массива до 6, а третье до 3.
в вашем случае смещения массива происходят в шестнадцатеричном формате (0x3a), который инициализирует 58-й элемент массива до значения CAPSLOCK, которое предположительно определено в коде выше кода, который вы показ.
версия в вашем коде без
=Кажется, это расширение для gcc.
Comments