8

Önişlemcinin neden olduğu bir şey için "Ulaşılamaz kod" uyarısından kaçınmanın bir yolu olup olmadığını anlamaya çalışıyorum. I , bu tür uyarıları bastırmak istemez, sadece önişlemciye bağlı olanlar, ör.Önişlemciye bağımlı kod için "Ulaşılamaz kod" uyarısını engelleyin

#if WINDOWS 
    public const GamePlatform platform = GamePlatform.PC; 
#else 
    public const GamePlatform platform = GamePlatform.MAC; 
#endif 

Ve daha sonra devam kod var: Bu iki bölümden

if (platform == GamePlatform.PC) 
{ 
    ... 
} 
else 
{ 
    ... 
} 

biri daima "Ulaşılamıyor kod" olarak algılanır ve biz her yerde bu var. Yarattığı birçok uyarıdan kurtulmayı denemek isterim, ancak yine de yasal olarak ulaşılamaz bir kod için uyarı almak istiyorum. (Gerçekte, orada sadece iki platformlarda daha, bu yüzden platforma özel kod her öbek gereksiz uyarıların bir yığın oluşturur.)

+1

Bu soruyu referans olarak kullanın. http://stackoverflow.com/questions/1930793/is-there-a-way-to-get-vs2008-to-stop-warning-me-about-unreachable-code/1930840#1930840 Özellikle Jason Down'un cevabına bakın. –

+0

İlk önce başka soruları araştırdım, özellikle bu konuyla ilgili önişlemciyle ilgilenmedim. (Erişilemez kodla ilgili birçok soru var, ancak kontrol ettiğim hiçbiri aynı senaryo gibi görünmüyordu.) Bununla başa çıkmanın bir yolu yoktur, bu da kodu önemli ölçüde uyandırmaz, performansı düşürmez. hafifçe) veya potansiyel olarak yararlı uyarıları gizleyin. –

cevap

8

1. Seçenek: if ifadesi bulunan her yerden önişlemci makro ekleyin. Bu daha performanslı olacak, ama belki biraz daha çirkin.

Seçenek 2: Platform değişkenini const yapmayın. Bunu statik olarak ayarlamak, uyarımı bana bıraktı.

+0

Ancak "seçenek 2" ile derleyici, "bölümleri" veya "dalları" nın her ikisini de IL'ye çevirmek zorunda kalacak ve bu IL'nin çoğu hiçbir zaman kullanılmayacak, bu yüzden de bir tür atık (çok önemli değil) DLL dosyasının boyutuna bakmazsanız). –

+0

Seçenek 2'nin muhtemelen ne yaptığımı değil, ancak en kolay ve bazen önemli olduğunu kabul ediyorum. "Ulaşılamaz kodun" IL'ye çevrilmediğinden bahsetmeye değerdir, bu yüzden onu statik durumdan değiştirmek, mevcut durumunuzdan daha "kötü" olacak, seçenek 1 ise uyarı ile aynı olacaktır. – lukegravitt

+0

Hmm, çirkin kodun biraz daha yavaş kodunun ebedi ikilemi - Ben 1. Seçenekle çıkacağımı biliyorum, ama ben her yerde önişlemci-şeyler ile kirletici kodu gerçekten sevmiyorum. Okumayı zorlaştırıyor. Ayrıca, derleyici onu yok sayar, inaktif kod bloklarında kötü kod olabilir, ki sadece '# tanımları' değiştiğinde görünecek olan eksik ... –