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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.