C dilinde enumeration (enum), isimlendirilmiş bir dizi tam sayı sabiti tanımlamanın bir yoludur. Tipik sözdizimi:
enum Color { RED, GREEN, BLUE };
Varsayılan olarak ilk değere 0 atanır, sonraki her birine ise bir önceki + 1 atanır.
Enumeration Avantajları:
enum bağımsız bir tür olarak kullanılırsa).Dezavantajları:
enum türü int'dir (C99'a kadar), bu nedenle katı tür güvenliği yoktur.enum ile int arasında örtülü dönüşüm vardır (aralık kontrolü yoktur).enum MyType : unsigned char - ama bu bir genişletmedir).Örnek:
enum State { INIT = -1, RUNNING = 0, PAUSED = 1, STOPPED = 2 }; enum State current = RUNNING;
Soru: Farklı enum değerlerini güvenli bir şekilde karşılaştırmak mümkün mü?
Cevap: Teknik olarak enum değerleri int olduğu için, farklı enum değişkenlerini karşılaştırmak önerilmez. Bu, anlamsal kayba yol açar ve okuyucu için kafa karıştırıcı olabilir, ayrıca kodun gelecekteki bakımını zorlaştırabilir. Türü açıkça dönüştürmek veya enum'ları mantıksal olarak yeniden gruplandırmak daha iyidir.
Hata Örneği:
enum Fruit { APPLE, BANANA }; enum Animal { CAT, DOG }; if ((enum Fruit)BANANA == (enum Animal)CAT) { ... } // Mantık hatası
Hikaye
Araçlar arası mesajlaşma protokolünde tekrarlayan #define'lar, çakışan değerlerin ortaya çıkmasına yol açtığında, enum'a geçiş yapmak, kullanılan tanımlayıcıların kontrolünü kolaylaştırdı ve hata ayıklamayı basitleştirdi.
Hikaye
Büyük bir kütüphanede durum işleme, sabit int değerleri üzerinden yapılmaktaydı. Yeniden yapılandırma sırasında tüm define değerlerinin yeni değerlerle senkronize edilmesi unutuldu. Enum'un kullanımı bunu engellemiş olsa da, bir modül eski define'ları kullanmaya devam etti ve belirlenmesi zor hatalara neden oldu.
Hikaye
Robotik düğümler yönetim sisteminde mühendis, enum'un ilk elemanına açıkça bir değer atamadı (sadece ikinci ve üçüncü kullanıldı). Program hatalı çalıştı çünkü varsayılan olarak ilk eleman 0 değerine sahip olup, beklenen farklı bir değerle çelişiyordu.