_Generic
- C kursu
- Uzman
- Ders 26/47
- 5 dk
_Generic ile generic makro öğrenirsin.
_Generic seçim ifadesi
_Generic, C11 ile gelen bir derleme zamanı yapısıdır. Bir ifadenin tipine göre farklı dallar seçer; bu sayede tip aşırı yükleme (overload) benzeri davranış elde edilir.
Yazımı: _Generic(ifade, int: "int", double: "double", default: "diğer"). Derleyici ifadenin tipini bulur ve karşılık gelen dalı seçer. default dalı, hiçbir tip eşleşmezse kullanılır. _Generic makrolarla birleştiğinde güçlü bir araç olur: tek bir makro, farklı tipler için farklı davranabilir.
_Generic makro örneği
Bir print_type makrosu, _Generic ile tip adını dize olarak verebilir. #define print_type(x) printf("%s", _Generic((x), int: "int", double: "double", default: "diğer")).
Burada (x) parantezi, makro parametresini güvenli kılar. _Generic'in sonucu bir dize; printf onu %s ile yazdırır. print_type(42) çağrısı "int" üretir, print_type(3.14) çağrısı "double" üretir. Bu desen, kütüphane tasarımda tip güvenli arayüzler oluşturmak için yaygın kullanılır.
Uygulama print_type makrosunu yaz
#define print_type(x) makrosunu _Generic ile yaz: int için "int", double için "double", default için "diğer" dizesini printf("%s\n", ...) ile yazdırsın. int main(void) içinde print_type(42) ve print_type(3.14) çağır.
Başlangıç kodu
#include <stdio.h>
// print_type makrosunu _Generic ile yaz
// int ve double tiplerini yakala
// main'de makroyu int ve double ile çağırÖrnek çözüm
#include <stdio.h>
#define print_type(x) printf("%s\n", _Generic((x), int: "int", double: "double", default: "diğer"))
int main(void) {
print_type(42);
print_type(3.14);
return 0;
}Beklenen çıktı
int double
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 _Generic dalını tamamla
_Generic(x, int: "int", ____: "diğer")
_Generic(x, int: "int", default: "diğer")
Açıklama: default dalı, hiçbir tip eşleşmezse seçilir.
2 _Generic ne zaman dallanır?
- Çalışma zamanında, değerlere bakarak
- Derleme zamanında, tipe bakarak Doğru cevap
- Bağlama zamanında, sembollere bakarak
- Yükleme zamanında, adrese bakarak
Açıklama: _Generic derleme zamanında ifadenin tipine bakarak dal seçer.
3 _Generic dalını eşle
| Kavram | Anlamı |
|---|---|
int: ... |
Tamsayı dalı |
double: ... |
Kesirli dalı |
default: ... |
Yakalama dalı |
char *: ... |
Dize dalı |