CodeBlanks Logo Icon CodeBlanks

C11 ve C17

C11 ve C17 standartlarını öğrenirsin.

C11 standardı

C11 (ISO/IEC 9899:2011), C dilinin modern sürümüdür. C99'dan sonra gelen bu sürüm, dile birçok önemli özellik kattı: atomik işlemler (stdatomic.h), iş parçacıkları (threads.h), tip tabanlı seçim (_Generic) ve derleme zamanı denetimleri (_Static_assert).

Bu özellikler C'yi modern sistem programlama ihtiyaçlarına cevap verecek hale getirdi. Atomik işlemler kilitsiz veri yapılarını, iş parçacıkları standart paralel programlamayı mümkün kılar. Derleyiciyi -std=c11 veya -std=c17 ile çalıştırırsın.

C17 düzeltme sürümü

C17 (ISO/IEC 9899:2018), C11'in bir düzeltme sürümüdür. Yeni dil özelliği eklemez; yalnızca C11'de bulunan hataları ve belirsizlikleri giderir. Bu yüzden C17, C11 ile tam uyumludur.

Pratikte C17, günümüzde önerilen sürümdür. Derleyiciyi -std=c17 -pedantic ile çalıştırmak, taşınabilir ve temiz kod yazmanı sağlar. __STDC_VERSION__ makrosu C11 için 201112L, C17 için 201710L değerini verir; böylece kodun hangi sürümle derlendiğini denetleyebilirsin.

Uygulama Standart sürümünü yazdır

#if __STDC_VERSION__ >= 201112L yönergesini kullanarak, modern C (C11 ve sonrası) ile "Modern C", aksi halde "Eski C" yazdıran bir int main(void) yaz. #if, #else ve #endif kullan.

Başlangıç kodu

main.c
#include <stdio.h>

// Standart sürümünü denetle:
// modern C ise "Modern C" yazdır
// değilse "Eski C" yazdır

Örnek çözüm

main.c
#include <stdio.h>

int main(void) {
#if __STDC_VERSION__ >= 201112L
    printf("Modern C\n");
#else
    printf("Eski C\n");
#endif
    return 0;
}

Beklenen çıktı

Modern C

Soru ve cevaplar

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

1 Hangi standart stdatomic.h başlığını getirdi?

  • C11 Doğru cevap
  • C99
  • C89
  • C17

Açıklama: stdatomic.h C11 ile geldi; atomik işlemler bu sürümde eklendi.

2 C17 sürüm makrosunu tamamla

Soru
#if __STDC_VERSION__ >= ____
    printf("C17\n");
#endif
Cevap
#if __STDC_VERSION__ >= 201710L
    printf("C17\n");
#endif

Açıklama: C17 için __STDC_VERSION__ 201710L değerini taşır.

3 Standart ve özelliği eşle

Kavram Anlamı
C11 Atomik işlemler
C17 Hata düzeltmeleri
C99 Tek satır // yorum
C89 İlk C standardı

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