- LiTime Speicher und Akkus         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: structs initialisieren

  1. #1
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    05.11.2007
    Beiträge
    1.076

    structs initialisieren

    Anzeige

    Praxistest und DIY Projekte
    Frage zum initialisierten struct:

    struct
    {
    int a;
    char b;
    unsigned int c;
    signed char d;
    } myStruct = {100,'X',30,100};

    Wenn ich nur einige wenige Werte habe, kann ich das noch überblicken.
    Aber ich habe eine komplette EEPROM Structur angelegt mit über 200 verschiedenen Werten, welche ich initialisieren möchte.
    Das wird dann aber extrem unübersichtlich. Welcher Wert gehört zu wem.....

    Gibt es in "C" eine Möglichkeit die struct Elemente mit Angabe des Namens zu initialisieren ?
    so zum Beispiel:

    {
    int a;
    char b;
    unsigned int c;
    signed char d;
    } myStruct = {a=100,b='X',c=30,d=100};

    Wenn da einfach nur hunterte von Werten hintereinander stehen, muss ich echt anfangen zu zählen, welcher Wert wohin gehört. oder alle untereinander schreiben und mit Kommenatren versehen.

    Oder ich muss die Software so umbauen, daß ich die Initialisierung im Programm ausführe.
    also:

    main()
    {
    myStruct.a = 100
    myStruct.b = 'X';
    myStruct.c = 30;
    myStruct.d = 100;
    ....
    ....

    ich vermute aber mal, daß dies "wesentlich" mehr Programmcode in Anspruch nimmt.

    Danke für Eure Info.
    Siro

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    25.04.2010
    Beiträge
    1.249
    Hi

    Einfacher wird es nicht gehen.
    Aber, für sowas gibt es Dokumentationen, da guckt man einmal rauf und weiss wie die Struktur aussieht.

    Edit:
    Wenn du, z.B. das Visual Studio benutzt, dann zeigt es dir beim programmieren die Membervariablen an. So musst du nur noch ei8ndeutige Namen verwenden und gut is.

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    05.11.2007
    Beiträge
    1.076
    und dachte an den Syntax von Delphi:

    const eeprom : record
    a : Integer;
    b : char;
    c : Word;
    d : Short;
    end = (a:10; b:'x'; c:30; d:100);

    aber was nicht geht, geht halt nicht. Schade...

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    25.04.2010
    Beiträge
    1.249
    Vielleicht kennt ja doch noch jemand einen anderen Weg.

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    41
    Beiträge
    2.009
    So schön einfach wie in PHP ("assoziative Arrays") gehts leider nicht.
    Was ich aber oft verwend, sind einfache Kommentare:

    Code:
    struct
    {
    int a;
    char b;
    unsigned int c;
    signed char d;
    } myStruct = {
    /* a = */ 100,
    /* b = */ 'X',
    /* c = */ 30,
    /* d = */ 100};
    Ist zwar etwas mehr Aufwand, aber so weiss man, was wohin gehört. Und solang man die Reihenfolge nicht durcheinanderschmeisst, passt das auch.
    #ifndef MfG
    #define MfG

  6. #6
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Gibt es in "C" eine Möglichkeit die struct Elemente mit Angabe des Namens zu initialisieren ?
    In C im Allgemeinen nicht, aber wenn du den GCC benutzt, dann schon:
    Code:
    myStruct = { .a=100, .b='X', .c=30, .d=100 };
    MfG
    Stefan

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    05.11.2007
    Beiträge
    1.076
    zu Jaecko:
    So in etwa habe ich es auch gemacht. Solange man die Struktur nicht ändert geht es ja auch.

    zu sternst:
    Da staune ich ja, daß der GCC so etwas zuläst. Guter Compiler, her damit....
    Mein IAR Compiler weigert sich aber, ich habe es eben mal in verschiedenen Varianten probiert.

    Na was solls, kein Weltuntergang.
    Siro

  8. #8
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.651
    Hallo sternst,

    danke für diese Auskunft! Bitte könntest Du dazu die Quelle nennen? Nicht dass ich misstrauisch bin, ich verfolge ja Deine Beiträge und bin immer beeindruckt. Aber in der Quelle stehen sicher noch mehr, andere interessante Details - und ich weiß nicht, wo ich das herkriege. Ich nutze für C neben dem KR immer (nur) die AVR Libc auf nongnu.org.

    Danke im Voraus
    Ciao sagt der JoeamBerg

  9. #9
    Erfahrener Benutzer Robotik Einstein Avatar von Felix G
    Registriert seit
    29.06.2004
    Ort
    49°32'N 8°40'E
    Alter
    40
    Beiträge
    1.780
    Solche Informationen stehen z.B. im GNU C Reference Manual
    So viele Treppen und so wenig Zeit!

  10. #10
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Man findet die Infos im GCC-Manual (http://gcc.gnu.org/onlinedocs/) unter "Designated Initializers".

    Und seit C99 ist es offizieller Bestandteil des C-Standards und dort zu finden im Kapitel "6.7.9 Initialization".
    MfG
    Stefan

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test