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

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

XX_CİHAN_XX

Kod Seç
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.
İdrak i meali bu küçük akla gerekmez, zira bu terazi bu kadar sıkleti çekmez.

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, 03:05:32enum ile yapılıp yapılamayacağını merak ediyorum :)
X-Macro ile yapilabilir.
Dünyanın en büyük sorunu, cahiller özgüven içindeyken akıllı insanların kuşkuyla dolu olmasıdır.

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:

Kod Seç
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, 13:14:42Çok çirkin olmakla birlikte:

Kod Seç
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