Makrolar ile inline fonksiyonlar arasındaki fark nedir? Makroların klasik tuzakları nelerdir?
Cevap
Makrolar preprocessor tarafından metin olarak yerine konur; tip kontrolü, kapsam ve debug bilgisi yoktur. static inline fonksiyonlar ise gerçek fonksiyon semantiğine sahiptir ve optimizasyonla genelde aynı hızda kod üretir.
Tuzak 1: Parantez eksikliği
#define SQUARE(x) x * x
SQUARE(a + 1); /* a + 1 * a + 1 → yanlış */
#define SQUARE(x) ((x) * (x)) /* doğru */Tuzak 2: Argümanın birden fazla değerlendirilmesi
#define MAX(a, b) ((a) > (b) ? (a) : (b))
MAX(i++, j); /* i iki kez artabilir */
MAX(read_adc(), 100); /* ADC iki kez okunur */Tuzak 3: Çok satırlı makro ve if-else
#define RESET() led_off(); motor_off()
if (err) RESET(); /* motor_off() her zaman çalışır */
#define RESET() do { led_off(); motor_off(); } while (0) /* doğru */inline alternatifi
static inline int32_t max_i32(int32_t a, int32_t b) {
return a > b ? a : b;
}| Kriter | Makro | static inline |
|---|---|---|
| Tip güvenliği | Yok | Var |
| Yan etkiler | Tekrar değerlendirme | Argüman bir kez değerlendirilir |
| Debug | Adım adım izlenemez | Breakpoint konabilir |
| Inline garantisi | Her zaman | Derleyici kararı (always_inline ile zorlanabilir) |
| Generic kullanım | Her tipe uyar | _Generic gerekir |
Makronun hâlâ gerekli olduğu yerler
- Koşullu derleme:
#ifdef DEBUG - Derleme zamanı sabitler ve register adresleri
__FILE__,__LINE__kullanan log/assert makroları- Token birleştirme (
##) ve stringize (#) - Statik dizi boyutu olarak kullanılan sabitler
İ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.