CodeBlanks Logo Icon CodeBlanks

_Generic

_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

main.c
#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

main.c
#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

Soru
_Generic(x, int: "int", ____: "diğer")
Cevap
_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ı

Uzman bölümündeki tüm dersler