CodeBlanks Logo Icon CodeBlanks

Özet - Modern C

_Generic, _Static_assert ve atomics'i birleştirerek tip güvenli bir makro yazarsın.

Özet - Modern C birleşimi

Bu derste _Generic, _Static_assert ve atomik işlemleri birleştirerek tip güvenli bir makro yazacaksın. safe_print makrosu, _Generic ile tipi seçer; _Static_assert ile int boyutunu doğrular; atomic_int sayaç ile çağrı sayısını tutar.

Bu üç özellik birlikte, modern C'nin gücünü gösterir: derleme zamanı güvenliği, tip tabanlı seçim ve iş parçacığı güvenli sayaç. Önceki derslerin çözümlerini birleştirip tek bir program yazacaksın. Program, her çağrıda tip adını yazdırır ve sayacı bir artırır; en son sayaç değerini yazdırır.

Uygulama safe_print makrosunu yaz

#include <stdatomic.h> ekle. _Static_assert(sizeof(int) >= 4, "int en az 4 bayt"); yaz. static atomic_int call_count = 0; tanımla. #define safe_print(x) makrosunu yaz: _Generic((x), int: "int", double: "double", default: "diğer") ile tipi seç, printf("%s\n", ...) ile yazdır, sonra atomic_fetch_add(&call_count, 1) ile sayacı artır. int main(void) içinde safe_print(42) ve safe_print(3.14) çağır, en son printf("%d\n", call_count) yazdır.

Başlangıç kodu

main.c
#include <stdio.h>
#include <stdatomic.h>

// derleme denetimi ekle
// atomik sayaç tanımla
// safe_print makrosunu yaz
// main'de çağır ve sayacı yazdır

Örnek çözüm

main.c
#include <stdio.h>
#include <stdatomic.h>

_Static_assert(sizeof(int) >= 4, "int en az 4 bayt");
static atomic_int call_count = 0;

#define safe_print(x) printf("%s\n", _Generic((x), int: "int", double: "double", default: "diğer")); atomic_fetch_add(&call_count, 1)

int main(void) {
    safe_print(42);
    safe_print(3.14);
    printf("%d\n", call_count);
    return 0;
}

Beklenen çıktı

int
double
2

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 safe_print hangi üç özelliği birleştirir?

  • malloc, free, realloc
  • _Generic, _Static_assert, atomics Doğru cevap
  • printf, scanf, fprintf
  • fork, exec, wait

Açıklama: safe_print, _Generic + _Static_assert + atomics birleşimidir.

2 Atomik artış çağrısını tamamla

Soru
static atomic_int call_count = 0;
____(&call_count, 1);
Cevap
static atomic_int call_count = 0;
atomic_fetch_add(&call_count, 1);

Açıklama: atomic_fetch_add(&call_count, 1) sayacı atomik artırır.

3 Özelliği görevine eşle

Kavram Anlamı
_Generic Tip seçimi
_Static_assert Derleme denetimi
atomic_int Atomik sayaç
printf Çıktı yazma

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