MSVC derleyicisinde nodiscard özniteliğinin konumu sessizce göz ardı ediliyor
Öne çıkanlar
- MSVC, static kelimesinden sonra gelen [[nodiscard]] özniteliğini /W4 seviyesinde bile sessizce yok sayıyor.
- Öznitelik satırın en başına alındığında derleyici beklenen C4834 uyarısını başarıyla veriyor.
- Clang ve GCC derleyicileri bu hatalı söz dizimini doğrudan derleme hatasıyla reddediyor.
Microsoft Visual C++ derleyicisinin, fonksiyon bildirimlerinde [[nodiscard]] özniteliğinin yazım yerine bağlı olarak beklenen uyarıları sessizce üretmediği tespit edildi. C++20 standardında ve en yüksek uyarı seviyelerinden biri olan /W4 altında derlenen kodlarda, işlevin dönüş değeri kullanılmasa bile derleyici herhangi bir hata ya da uyarı vermeden süreci tamamlıyor.
İncelemeye göre [[nodiscard]] özniteliği "static" anahtar kelimesinden sonra yazıldığında MSVC dönüş değerinin atılmasını tamamen yok sayıyor. Öznitelik satırın en başına, yani "static" ifadesinin önüne taşındığında ise derleyici C4834 numaralı beklenen uyarıyı üretiyor. Kodun söz dizimindeki bu küçük yer değişimi, derleyicinin güvenlik mekanizmasını doğrudan devre dışı bırakıyor.
Aynı kod yapısı Clang ve GCC derleyicilerinde test edildiğinde, her iki derleyici de yanlış konumlandırılan özniteliği derleme hatası vererek reddediyor. Visual Studio 2022 üzerinde çalışan MSVC'nin ise bu durumu sessizce kabul etmesi, geliştiriciler nezdinde hatalı bir güven algısı oluşturuyor.
Bu özet yapay zekâ ile hazırlanmıştır; ayrıntılar ve doğrulama için orijinal kaynağa başvurun.