C++11 - static_assert ile dikkatsiz programlamaya son!

Selamlar herkese!

Bu yazımda sizlere static_assert'ten ve onun kullanımından bahsedeceğim. Hazırsanız başlayalım!

Ne ola ki bu static_assert?

Dikkatsizce programlama yaptığımız zaman, bizi derleme zamanında uyaracak olan kullanışlı bir fonksiyon kendisi.

C++'ta 3 adet hata türü bulunmakta. Bunlar:

  • Compile time error: Derleme zamanında oluşan hatalar. Derleyici nerede hata veriyorsa önce orayı kontrol edin.
  • Runtime error: Genelde son kullanıcının elinde gereken dosyaları bulundurmamasından kaynaklanır. Örneğin bazı programlar Visual C++ Redistributable 2015 istediği halde bilgisayarda Visual C++ Redistributable 2015 bulunmadığı zaman hata almaktayız. Bu bir runtime errordur, ve Visual C++ Redistributable 2015 kurarak çözülebilir.
  • Logical error: Adından da anlaşılacağı üzere, mantık hatası. Örneğin, 0'a bölmeyi istisna olarak kabul etmediğimiz zaman, başımıza gelebilecek olası bir durumdur.
static_assert ise ilk tür olan derleme zamanı hataları daha rahat ayıklamamız içindir. Dikkatsiz olduğumuz veya koddan emin olmadığımız durumlarda kullanılabilir.

Nasıl kullanılır? Örnek bir kod ile de anlatabilir misin?

Öncelikle, kendisi iki tane parametre almakta. Birisi constexpr türünden bir parametre iken, diğeri ise derleyicide göstereceğimiz mesajdır.

static_assert(bool_constexpr, string message)

bool_constexpr: Buraya olması gereken şartımızı giriyoruz. Mesela x değişkenimiz olsun ve bu değişken sabit (constant) olarak 10 değeri ile yazılmak zorunda. Buraya da x==10 yazmalıyız, doğru olursa static_assert hatası karşımıza çıkmaz fakat yanlış olursa, bunun doğru olmadığını static_assert, bize derleme zamanında bildirir.

message: C++17 ile birlikte opsiyoneldir mesaj yazıp yazmamak, ama mesaj yazmanızı tavsiye ederim. Eğer static_assert'e verdiğimiz bool_constexpr parametresi yanlış ise, bu mesaj derleyici tarafından ekranda gösterilecektir.


Derleyici olarak G++ kullandığınızı ve "-std=c++11" parametresi ile çalıştırdığınızı farz ediyorum ve ona göre bir örnek kod yazıyorum.

Bilindiği üzere, G++'ta int'in boyutu 4 byte'a tekabül etmekte. Ve biz, static_assert'imize int'in 2 byte olması gerektiğini yazalım ve olacakları görelim.

Kod:
int main(){

    static_assert(sizeof(int) == 2, "INT32'nin boyutu 2 byte olmalıdır.");

return 0;
}

Bu kodu derlemeye çalışınca da şu sonucu elde ederiz:

terminal.png


Okuduğunuz için teşekkürler!

Yorumlar

Gösterilecek yorum bulunamadı.

Blog girdisi detayları

Ekleyen
TerabyteForever
Okuma süresi
2 dakika okuma
Görüntüleme
772
Son güncelleme

Yazılım kategorisindeki diğer girdiler

TerabyteForever adlı kullanıcının diğer girdileri

Bu girdiyi paylaş

Geri
Yukarı