Derleyici uyarılarını ne yapmak lazım?

taydin

Timur Aydın
Staff member
Katılım
24 Şubat 2018
Mesajlar
22,051
Genel olarak, derleyiciyi ne kadar fazla uyarı üretecek şekilde ayarlarsak, o kadar iyi. Maksimum uyarı seviyesi ile, hiç uyarı üretmeyen kod yazabiliyorsanız, o kodda umulmadık bug'ların veya güvenlik açıklarının olma riskini azaltmış olursunuz.

Ama bazan bu gerçekçi olmuyor. Kodun okunabilirliği açısından veya performans açısından bazan derleyicinin beğenmeyeceği bir kod yazmanız gerekebiliyor.

Mesela switch/case yapılarında derleyici, her case'den sonra mutlaka break ister. Ama ben bazan bir case'de yapılan işlerin yapılmasını isterim, sonra da bir sonraki case'in içine düşüp oradan devam etmek isterim. Burada derleyici hemen uyarısını üretecek. Böyle durumlarda ne yapmak lazım?

C:
switch (a)
{
    case 0:
        b = 8;
        break;

    case 1:
        b = 17;
        /* asagidaki case ile devam */

    case 2:
        b = b + 3;
        break;
}

Derleyiciye desek "bir case'den sonraki case'e düşme için uyarı üretmeyi kes" nasıl olur? Evet bunu yaparsak derleyici uyarı üretmeyecek, ama bu genel bir ayar olacak ve başka yerde sen yanlışlıkla break koymayı unutmuşsan orada da uyarı üretmeyecek.

İşte böyle durumlar için, GNU GCC derleyicisinin sağladığı çok güzel bir olanak var. Kodda sadece belli bir bölgede bir uyarıyı devreden çıkarmak ve onun dışındaki yerlerde uyarının devre kalmasını sağlamak. Yukarıdaki örnek için uygulamayı yapalım.

Ilk pragma, mevcut uyarı üretme ayarını bir kenara yazıyor. Sonraki pragma, uyarıyı susturuyor. Bizim switch ile işimiz bittikten sonraki pragma da uyarı ayarlarını eski haline getiriyor.

C:
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wimplicit-fallthrough"
"
switch (a)
{
    case 0:
        b = 8;
        break;

    case 1:
        b = 17;
        /* asagidaki case ile devam */

    case 2:
        b = b + 3;
        break;
}

#pragma GCC diagnostic pop
 
bende kendime uyarı notu olarak warning kullanmaya başladım. unutma şansı bırakmıyor...

#warning buraya sonra şunu yap...
 
#warning buraya sonra şunu yap...

Ama orada dikkat etmen lazım. Kendine fazla warning notu bırakırsan, derleme sırasındaki hızlı ekran akışında gerçek uyarıları kaçırabilirsin. Bir de senin notlar yüzünden program derlemesi bittiğinde hiçbir zaman "0 errors, 0 warnings" görmeyeceksin. warning sayısı sürekli değişecek ve bu durumda eğer yüzlerce source dosyasından oluşan bir proje varsa, kodda gerçek warning var mı yok mu anlamayacaksın.

Onun yerine eğer eclipse türevi bir IDE kullanıyorsan, TODO içeren bir comment ekle. Eclipse bunları otomatik olarak buluyor ve bir pencerede gösteriyor.

1713291334265.png
 

Forum istatistikleri

Konular
5,973
Mesajlar
101,859
Üyeler
2,514
Son üye
evrenbasaran

Son kaynaklar

Son profil mesajları

deneyci wrote on hakan8470's profile.
Sibonge uNkulunkulu ngokuhlukahluka asinike kona.

Bu hangi dil? :)
Lyewor_ wrote on taydin's profile.
Merhabalar. Elektrik laboratuvarınız varsa bunun hakkında bir konunuz var mı acaba? Sizin laboratuvarınızı merak ettim de :)
Lyewor_ wrote on taydin's profile.
Merhabalar forumda yeniyim! Bir sorum olacaktı lcr meterler hakkında. Hem bobini ölçen hemde bobin direnci ölçen bir lcr meter var mı acaba?
gruptaki arkadaşlara selamlar. sıteyi bu gün fark ettim. Asansör için 2x7 segment LCD gösterge üretmek istiyorum. acaba bu sayfadaki arkadaşlardan destek alabilirmiyim. LCD nin mantık açılımı ektedir.
deneyci wrote on TA3UIS's profile.
Selam.
Amatör telsiz lisansı nasıl alınıyor?
Lisansı olmayanı forumlarına almıyorlar. :)
Bilgi alamıyoruz.
Back
Top