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

taydin

Timur Aydın
Staff member
Katılım
24 Şubat 2018
Mesajlar
26,187
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?

Kod:
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.

Kod:
#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
8,448
Mesajlar
138,572
Üyeler
3,343
Son üye
Yigitaatalay

Son kaynaklar

Son profil mesajları

mechanic ayhanarican mechanic wrote on ayhanarican's profile.
https://www.allmystery.de almanca biliyorsan burada araştır. Yapay zekada çeviriyor gerçi.
Almanların matematik bilgisi daha iyi oluyor.
“Kendi yolunu çizen kişi, kimsenin izinden gitmez.” – Nietzsche
Kim İslâm’da güzel bir çığır açarsa (güzel bir alışkanlık başlatırsa), onun sevabı ve kendisinden sonra ona uyanların sevapları, onların sevaplarından hiçbir şey eksilmeksizin ona da yazılır.
erdemtr55 taydin erdemtr55 wrote on taydin's profile.
Merhaba Taydin bey,
Gruba spms serisi yapıcak mısınız?
ben 3 sargılı toroid ile 2 adet flyback sürücek bir devre yapmayı düşünüyorum.size soracak sorularım vardı?
Mutluluğun resmi illa güzel çizilmiş tablo olmak zorunda değil.Bazen basit bir çizgi,doğru bir renk,yada küçük bir detay
Back
Top