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.
Enum şart değilse int dizisi kullanıp sizeof ile hesaplayabilirsiniz.
Enum için bildiğim kadarıyla böyle bir yapı yok.
enum ile yapılıp yapılamayacağını merak ediyorum :)
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.
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.
Ç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)
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.
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);