_Static_assert
- C kursu
- Uzman
- Ders 27/47
- 5 dk
_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
#include <stdio.h>
// derleme zamanı denetimi ekle
// main'de "Denetim geçti" yazdırÖrnek çözüm
#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
_Static_assert(sizeof(int) >= ____, "int en az 4 bayt");
_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.