C de bir enum list'in eleman sayısını nasıl hesaplarız?

Başlatan XX_CİHAN_XX, 26 Mayıs 2018, 23:23:06

XX_CİHAN_XX

enum blah {
    FIRST = 7,
    SECOND = 15,
    THIRD = 9,
    LAST = 12
};
#define blahcount 4

Buradaki gibi blahcount ifadesinin tanımlanmasını bir makro ile otomatik yapabilir miyiz? Enum list sıralı artsa sorun yok ancak yukarıdaki gibi farklı değerler alan bir liste için soruyorum sorumu.
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

baran123

Enum şart değilse int dizisi kullanıp sizeof ile hesaplayabilirsiniz.
Enum için bildiğim kadarıyla böyle bir yapı yok.

XX_CİHAN_XX

enum ile yapılıp yapılamayacağını merak ediyorum :)
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

mufitsozen

Alıntı yapılan: XX_CİHAN_XX - 27 Mayıs 2018, 00:05:32enum ile yapılıp yapılamayacağını merak ediyorum :)
X-Macro ile yapilabilir.
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

foseydon

tam emin değilim ama yapılmıyor olması lazım. ayrıca yapmamalısın da. hocam enum a bir tane daha eleman ekle, COUNT diye. enuma her eleman eklediğinde bunu da güncelle. zaten o enum a eleman eklemek için o dosyayı açıp yazacaksın, bir alt satırda ufak bir değişiklik yapmak bu kadar zor olmasa gerek.

Elektroemre

Çok çirkin olmakla birlikte:

enum blah {
    __BLAH_START = __LINE__,
    FIRST = 7,
    SECOND = 15,
    THIRD = 9,
    LAST = 12
    __BLAH_END = __LINE__
};
#define blahcount (__BLAH_END  - __BLAH_START  - 1)

XX_CİHAN_XX

Alıntı yapılan: Elektroemre - 28 Mayıs 2018, 10:14:42Çok çirkin olmakla birlikte:

enum blah {
    __BLAH_START = __LINE__,
    FIRST = 7,
    SECOND = 15,
    THIRD = 9,
    LAST = 12
    __BLAH_END = __LINE__
};
#define blahcount (__BLAH_END  - __BLAH_START  - 1)

__LINE__ direktifini bilmiyordum, güzelmiş. IAR'ın derleyicisinde çalışır mı bilmiyorum ama deneyeceğim.
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

Burak B

Modern derleyicilerin hemen hepsinde çalışır. __LINE__, __FILE__, __DATE__, __TIME__ v.b. "Standard Predefined Macro" tanımına giren standartlaşmış C derleyici makroları zaten. Hata bildirim, ayıklama ve sürümleme gibi işlemlerde çok yaygın kullanılırlar.

Örneğin;

printf ("HATA: "
            "Dosya %s, satır %d.
            "Dizi indeksi olması gereken sınırların dışında ! (%d)\n",
            __FILE__, __LINE__, len);
"... a healthy dose of paranoia leads to better systems." Jack Ganssle