static uint8_t togglecode[256] = {
[0x3A] CAPSLOCK,
[0x45] NUMLOCK,
[0x46] SCROLLLOCK
};
Burada ne anlamı [0x3A]var? Sadece şöyle ifadeler öğrendimint a[2] = {1, 2};
static uint8_t togglecode[256] = {
[0x3A] CAPSLOCK,
[0x45] NUMLOCK,
[0x46] SCROLLLOCK
};
Burada ne anlamı [0x3A]var? Sadece şöyle ifadeler öğrendimint a[2] = {1, 2};
Yanıtlar:
Bu başlatma işlemini gerçekleştirmek anlamına gelir , n dizinin inci elemanı. Verdiğiniz örnek şu anlama gelecektir:
togglecode[0x3A] == CAPSLOCK
togglecode[0x45] == NUMLOCK
togglecode[0x46] == SCROLLLOCK
Bunlar "belirlenmiş başlatıcılar" olarak adlandırılır ve aslında C99 standardının parçasıdır. Ancak, olmadan sözdizimi =değildir. Bu sayfadan:
Bunun için GCC 2.5'ten beri kullanılmayan ancak GCC'nin hala kabul ettiği alternatif bir sözdizimi
[index], öğe değerinden önce no=.
Göre GCC docs bu ISO C99 uyumludur. Buna "Atanmış Başlatıcılar" diyorlar:
Bir dizi indeksi belirtmek için, öğe değerinden önce "[index] = 'yazın. Örneğin,
int a[6] = { [4] = 29, [2] = 15 };eşdeğerdir
int a[6] = { 0, 0, 15, 0, 29, 0 };
Bu sözdizimini daha önce hiç görmedim, ancak bunu gcc 4.4.5 ile -Wall ile derledim. Başarıyla derlendi ve hiçbir uyarı vermedi.
Bu örnekten de görebileceğiniz gibi, belirli dizi elemanlarını başlatmanıza izin vererek diğerlerini el değmeden bırakır.
Bu, C99'da tanıtıldı ve buna atanmış bir başlatıcı deniyor .
Temel olarak, geri kalanı varsayılan olarak bırakılarak bir dizide belirli değerleri ayarlamanıza izin verir.
Bu özel durumda, dizi indeksleri klavye tarama kodlarıdır. 0x3aolduğu belirlenmiş # 1'de tarama kodu için (bölüm 10.6 bakınız) CapsLocktuşu, 0x45olduğu NumLockve 0x46 olduğunu ScrollLock.
Yukarıdaki ilk bağlantıda şunu belirtir:
int a[6] = { [4] = 29, [2] = 15 };
eşdeğerdir:
int a[6] = { 0, 0, 15, 0, 29, 0 };
İlginçtir ki, bağlantı =gerekli olduğunu belirtse de , burada durum böyle görünmüyor.
Bu (yakın) belirlenmiş başlatıcıların sözdizimi , bir C99 özelliği.
Temel olarak, bir dizinin parçalarını başlatır, örneğin;
int aa[4] = { [2] = 3, [1] = 6 };
Dizinin ikinci değerini 6'ya ve üçüncüsünü 3'e başlatır.
Sizin durumunuzda, dizi uzaklıkları, dizinin 58'inci öğesini, muhtemelen gösterdiğiniz kodun üzerindeki kodda tanımlanan CAPSLOCK değerine başlatan onaltılık (0x3a) biçiminde olur.
Kodunuzdaki sürüm, =gcc'ye özgü bir uzantı gibi görünüyor.