Soru Tarihi:
switch operatörü, C diline ifade değerine göre kontrol akışını birkaç dal arasında dağıtmak için eklendi. Bu, büyük bir if-else zincirine bir alternatiftir ve genellikle komutların, durumların ve enumeration değerlerinin işlenmesinde kullanılır.
Problemler:
switch operatörünün temel tehlikeleri, unutulmuş break ifadeleri, beklenmedik "düşme" (fallthrough), blok içinde tanımlanan değişkenlerle ilgili zorluklar ve ifade türünün tam sayı olması gerektiği ile ilgilidir.
Çözüm:
Güvenli kullanım için:
break kullanın (veya düşmeyi belirtmek için yorumlar ekleyin);int veya onunla uyumlu olmayan türleri kullanmayın;case içinde öngörülmeyen tüm değerleri default dalında işleyin;case yapılarının dışında veya {} kapsamlarında tanımlayın.Kod örneği:
#include <stdio.h> void print_day(int day) { switch (day) { case 1: printf("Pazartesi "); break; case 2: printf("Salı "); break; case 3: printf("Çarşamba "); break; case 4: printf("Perşembe "); break; case 5: printf("Cuma "); break; case 6: case 7: printf("Hafta Sonu "); break; default: printf("Bilinmeyen gün "); } }
Anahtar özellikler:
break olmadan.Switch ifadesinde float türü kullanabilir misiniz?
Hayır. C dilinin standardı, switch ifadesinin tam sayı veya tam sayıya dönüştürülmüş olması gerektiğini talep eder (char, short, int, long, enum vb.).
Case’leri yer değiştirirseniz ne olur — sıralama mantığa etkiler mi?
Switch’taki case tanımlarının sırası, istenen değerin bulunmasını etkilemez. Kod, eşleşen case'den ilk breake kadar çalışır. Ancak, sıralama break olmaksızın (düşme) etkilidir.
Case içinde değişkenleri süslü parantez olmadan tanımlayabilir misiniz?
Hayır. Eğer case'den sonra süslü parantez olmadan değişken tanımlarsanız, bu derleme hatasına yol açar. Doğru:
switch (x) { case 1: { int y = 0; break; } }
break unutmak, gereksiz yan etkilere neden olmak.Büyük bir projede bir programcı, bir case'den sonra break unuttu ve birden fazla dalın ardışık olarak yanlış çalıştığını öğrendi. Hata ancak kullanıcı tarafından fark edildi.
Artılar:
Eksiler:
Düşmenin gerekli olduğu durumlarda, hepsi açıklamalı düşme ile birlikte yorumlanmış ve tüm kritik case'ler break veya return ile birlikte korunmuş, default'ta bir uyarı verilmiştir.
Artılar: