CodeBlanks Logo Icon CodeBlanks

_Static_assert

_Static_assert ile derleme zamanı denetimini öğrenirsin.

_Static_assert derleme denetimi

_Static_assert, C11 ile gelen bir derleme zamanı denetimidir. _Static_assert(sabit_ifade, "ileti"); biçiminde yazılır. Eğer sabit ifade yanlışsa (sıfırsa), derleme durur ve ileti gösterilir.

Bu, yapı boyutları, sabit değerler ve tip özellikleri gibi derleme zamanında bilinen koşulları doğrulamak için kullanılır. <assert.h> başlığını eklersen static_assert eşadı da kullanılabilir. Çalışma zamanı assert'inden farklı olarak, _Static_assert hiçbir çalışma maliyeti getirmez; denetim tamamen derleme sırasında yapılır.

_Static_assert kullanımı

Tipik kullanım, yapı boyutu veya sabit değer denetimidir. _Static_assert(sizeof(int) >= 4, "int en az 4 bayt"); satırı, int tipinin en az 4 bayt olduğunu doğrular. Eğer bir platformda int daha küçükse, derleme anında durur.

Bu, taşınabilirlik denetimi için güçlü bir araçtır. Başlık dosyalarında platform varsayımlarını belgelemek ve doğrulamak için kullanılır. İleti, derleyici hatasında görünür; bu sayede başka bir geliştirici neden derlemenin durduğunu anlar. _Static_assert ayrıca enum değer aralıkları ve derleme sabitleri için de kullanılır.

Uygulama _Static_assert ekle ve yazdır

_Static_assert(sizeof(int) >= 4, "int en az 4 bayt"); satırını ekle. int main(void) yaz ve içinde printf("Denetim geçti\n"); ile mesaj yazdır.

Başlangıç kodu

main.c
#include <stdio.h>

// derleme zamanı denetimi ekle
// main'de "Denetim geçti" yazdır

Örnek çözüm

main.c
#include <stdio.h>

_Static_assert(sizeof(int) >= 4, "int en az 4 bayt");

int main(void) {
    printf("Denetim geçti\n");
    return 0;
}

Beklenen çıktı

Denetim geçti

Soru ve cevaplar

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

1 Denetim türlerini eşle

Kavram Anlamı
_Static_assert Derleme zamanı
assert Çalışma zamanı
#if Ön işlemci
if Akış denetimi

2 _Static_assert koşulunu tamamla

Soru
_Static_assert(sizeof(int) >= ____, "int en az 4 bayt");
Cevap
_Static_assert(sizeof(int) >= 4, "int en az 4 bayt");

Açıklama: int en az 4 bayt olmalıdır; bu taşınabilirlik için yaygın bir varsayım.

3 _Static_assert ne zaman fire eder?

  • Çalışma zamanında, koşul yanlışsa
  • Bağlama zamanında, sembol eksikse
  • Derleme zamanında, koşul yanlışsa Doğru cevap
  • Yükleme zamanında, adres çakışırsa

Açıklama: _Static_assert derleme zamanında çalışır; koşul yanlışsa derleme durur.

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