Şu C bildirimlerini okuyun: int *a[10]; int (*a)[10]; int (*a)(int); int (*a[10])(int); Karmaşık bildirimler nasıl çözülür?
Cevap
Karmaşık bildirimler sağ-sol (right-left / spiral) kuralı ile okunur: değişken adından başlayıp önce sağa ([] dizi, () fonksiyon), sonra sola (* pointer) bakılır; parantezler önceliği değiştirir.
| Bildirim | Anlamı |
|---|---|
int a; | int |
int *a; | int'e pointer |
int **a; | int'e pointer'a pointer |
int a[10]; | 10 int'lik dizi |
int *a[10]; | 10 elemanlı, int pointer'larından oluşan dizi |
int (*a)[10]; | 10 int'lik bir diziye pointer |
int (*a)(int); | int alıp int döndüren fonksiyona pointer |
int (*a[10])(int); | int alıp int döndüren 10 fonksiyon pointer'ından oluşan dizi |
Klasik zor örnek: signal()
void (*signal(int sig, void (*handler)(int)))(int);Okuma: signal, bir int ve bir fonksiyon pointer'ı alan bir fonksiyondur; dönüş değeri int alıp void döndüren bir fonksiyona pointer'dır.
typedef ile okunur hale getirmek
typedef void (*sighandler_t)(int);
sighandler_t signal(int sig, sighandler_t handler);
typedef int (*op_fn)(int);
op_fn ops[10]; /* int (*ops[10])(int) ile aynı */Gömülü kullanım
int (*a)[10]bir 2D tamponun satırlarını gezmek için kullanılır:a++40 byte ilerler.- Fonksiyon pointer dizileri komut tabloları ve kesme vektör tablosunda kullanılır:
typedef void (*isr_t)(void);
__attribute__((section(".isr_vector")))
const isr_t vector_table[] = { Reset_Handler, NMI_Handler, HardFault_Handler };cdecl aracı (cdecl explain "int (*a[10])(int)") bildirimleri doğrulamak için kullanışlıdır. Kodda ise karmaşık bildirimleri her zaman typedef ile sadeleştirmek okunabilirliği artırır.
İlgili C Programlama soruları
- C dilinde volatile anahtar kelimesi ne işe yarar?
- Bir yazmaçtaki belirli bir biti set, clear ve toggle eden C kodunu yazın.
- Stack ile heap arasındaki fark nedir? Gömülü sistemlerde dinamik bellek kullanımından neden kaçınılır?
- Endianness nedir? Little-endian ile big-endian farkı nedir?
- Bit field nedir? Donanım register'larına erişimde bit field mi yoksa bit maskesi mi kullanılmalı?
- Fonksiyon pointer'ları ve callback tabloları gömülü sistemlerde nasıl kullanılır? Bir state machine örneği verin.
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.