Makro fonksiyonlar
- C kursu
- Başlangıç
- Ders 109/116
- 5 dk
Parametreli makro fonksiyonlar yazmayı öğrenirsin.
Makro fonksiyonlar
Bir #define komutu parametre de alabilir; buna makro fonksiyon denir. Çağrıldığı yere derleme öncesi metin olarak genişletilir.
#define SQUARE(x) ((x) * (x))
int r = SQUARE(5); /* ((5) * (5)) = 25 */Her parametre parantez içine alınmalıdır; aksi halde öncelik sorunları çıkar. Örneğin SQUARE(a+b) çağrısı ((a+b) * (a+b)) olarak genişletilir. Makro fonksiyonlar derleme öncesi metin değişimi olduğu için tür denetimi yapmaz; bu yüzden dikkatli kullanmak gerekir.
Parantez kullanımının önemi
Makro fonksiyonlarda her parametre parantez içine alınmalıdır. Aksi halde öncelik hataları oluşur.
#define BAD(x) x * x
#define GOOD(x) ((x) * (x))
BAD(2+3) /* 2+3*2+3 = 11 */
GOOD(2+3) /* ((2+3) * (2+3)) = 25 */BAD makrosu parametreleri parantezlemediği için 2+3*2+3 olarak genişletilir; bu yanlış sonuç verir. GOOD ise doğru parantezleme sayesinde beklenen 25 sonucunu verir. Bu yüzden makro yazarken her zaman parantez kullanmalısın.
Uygulama SQUARE makrosu ile kare hesapla
#define SQUARE(x) ((x) * (x)) makrosunu tanımla. main içinde printf ile SQUARE(5) değerini %d biçiminde yazdır.
Başlangıç kodu
#include <stdio.h>
// SQUARE(x) makrosunu tanımla
int main(void) {
// printf ile SQUARE(5) değerini yazdır
return 0;
}Örnek çözüm
#define SQUARE(x) ((x) * (x))
printf("%d\n", SQUARE(5));Beklenen çıktı
25
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Makro fonksiyon ile gerçek fonksiyon arasındaki temel fark nedir?
- Makro derleme öncesi metin değişimidir Doğru cevap
- Makro daha güvenlidir
- Makro tür kontrolü yapmaz
- Makro daha yavaştır
Açıklama: Makro fonksiyon değil, derleme öncesi metin değişimidir.
2 Makro ve davranış eşleştir
| Kavram | Anlamı |
|---|---|
#define PI 3.14 |
Sabit |
#define SQUARE(x) |
Makro fonksiyon |
((x) * (x)) |
Parantezli gövde |
#include |
Başlık ekler |
3 Boşluğu doldur: makro fonksiyon gövdesi
#define SQUARE(x) ____
#define SQUARE(x) ((x) * (x))
Açıklama: ((x) * (x)) her parametreyi parantezler; doğru genişletir.