Anahtar durumu, kullanılmayan bir satırı yorumladıktan sonra derlenmez


82

İşte kodum:

hangi güzel derler.

Ancak bu satırı yorumladığımda:

Alacağım:

Neyi kaçırıyorum?


Belki bu sorunun başlığı düzenlenmeli? Kabul ederse daha deneyimli biri bunu yapabilir mi?
Koray Tugay

İsterseniz kendiniz düzenleyebilmelisiniz. Ama katılıyorum, başlık daha iyi olabilirdi.
QuestionC

@KorayTugay, bir koştum.
Paul Draper

1
Bir değişken bildirimine sahip olmak case(üst cevabın önerdiği gibi çevreleyen parantezler olmadan) kötü bir fikirdir, çünkü o zaman değişkenin adı daha sonraki ' caselerde görünür olacak, ancak ilklendirilmemiş olacaktır (siz bırakmadıkça).
MM

Yanıtlar:


111

Bir switch ifadesindeki her durum teknik olarak bir etikettir. Bazı belirsiz ve eski nedenlerden dolayı , bir etiketten sonraki ilk satır olarak bir değişken bildirimine sahip olmanıza izin verilmez. Ödevi yorumlayarak

çizgi

AF_INET:Dediğim gibi, C'de yasa dışı olan etiketten sonraki ilk satır olur .

Çözüm, tüm durum ifadelerinizi şu şekilde küme parantezleri içine almaktır:

Her neyse, bence bu daha iyi kodlama pratiği.


22
Güzel. Nitpicking "Her vaka ... etiketli bir ifadedir". Nedeni de budur: İfadeler etiketlenebilir ancak beyanlar olamaz.
undur_gongor

4
@KorayTugay Bazen derleyici mesajları, olmasını istediğimiz kadar bilgilendirici değildir .... bazen çok bilgilendirici olurlar (öksürük öksürük C ++ stl öksürük öksürüğü).
John M

5
@BlueMoon Haklısın. Eğer ne zaman satın C ++ stl hata iletileri basitleştirmek için bir araç, bilgi yoğunluğu inanılmaz düşük olduğunu biliyorum!
John M

3
veya bildirimleri geçiş engellemeden önce taşıyın
Pavel Gatnar

3
@immibis: C ++ 'da bildirimler deyimlerdir, bu nedenle C ++' da bildirimleri herhangi bir kısıtlama olmadan etiketleyebilirsiniz. C'de beyanlar ifade değildir, bu yüzden onları etiketleyemezsiniz. İşte C ve C ++ arasındaki bu farkı gösteren bir örnek: stackoverflow.com/a/19830820/187690
AnT

15

Kabul edilen cevabın bir tamamlayıcısı olarak, değişkenlerinizi durum etiketlerinden önce belirtebilirsiniz.

Ya da sadece boş bir ifade kullanın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.