Array vorbelegen und Anzahl Einträge in enum?

Gast #2179432
Lesenswert?

Erstmal der Quelltext um den es geht:
1
typedef enum 
2
{
3
    E1,
4
    E2,
5
    E3,
6
    E4
7
} TIMER_ID;
8

9
#define TIMER_COUNT    4u    //Anzahl der im enum definierten Timer
10

11
static volatile uint16 Timers[TIMER_COUNT] = {65535, 65535, 65535, 65535};

Kann man alle Felder eines Arrays mit dem selben Wert vorbelegen lassen 
ohne dafür eine funktion schreiben und aufrufen zu müssen? (vielleicht 
mit precompiler direktiven?)

Kann man so eine art #define in der steht wieviel elemente sich in einem 
enum befinden automatisch erstellen lassen?
Gast #2180824
Lesenswert?

In C gibt es nichts direkt, aber in GCC eine Erweiterung:
1
 To initialize a range of elements to the same value, write `[FIRST ...
2
LAST] = VALUE'.  This is a GNU extension.  For example,
3

4
     int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 };
(Kapitel "Designated Initializers")

Aber auch da nichts, um alle Felder zu belegen. Man muss explizit die 
Index-Bereiche angeben.
Gast #2180951
Lesenswert?

1
typedef enum 
2
{
3
    E1 = 0, // für die Ängstlichen ...
4
    E2,
5
    E3,
6
    E4,
7
    TIMER_COUNT
8
} TIMER_ID;
9

10
static volatile uint16_t Timers[TIMER_COUNT] = {
11
    [0 ... TIMER_COUNT-1] = 65535,
12
};
So könnte das im GCC, dank seiner Erweiterungen, funktionieren. Der GCC 
akzeptiert auch berechnete Konstanten bei den Bereichsangaben. Beim 
WinAvr funktioniert bei mir so etwas ähnliches zumindest bei Daten im 
Eeprom.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren