Werte von struct-member ändern

OP #2869462
Lesenswert?
• ▲
▼
Guten Tag!

Ich arbeite mit dem STM32F107VCT6 und dem uVision Pro 4.60.


1
typedef enum  { eWS_Ly1_INTR,           
2
                eWS_Ly1_MAIN,           
3
                eWS_Ly1_RMT,            
4
                eWS_Ly1_FW,             
5
                eWS_Ly1_DT,             
6
                eWS_Ly1_NONE            
7
              }
8
        tWS_Ly1;
9

10
typedef enum  { eWS_Ly2_OP,             
11
                eWS_Ly2_CL,             
12
                eWS_Ly2_STP,            
13
                eWS_Ly2_CAL,            
14
                eWS_Ly2_BK_Ly1,         
15
                eWS_Ly2_NONE            
16
              }
17
        tWS_Ly2;
18

19
typedef enum  { eWS_Ly3_FW_DW,          
20
                eWS_Ly3_BK_Ly1,         
21
                eWS_Ly3_NONE            
22
              }
23
        tWS_Ly3;
24

25

26
typedef struct{ 
27
                tWS_Ly1 Ly1;
28
                tWS_Ly2 Ly2;
29
                tWS_Ly3 Ly3;
30
              }
31
        tWS_Layer;              // Struct Identifier
1
// prototypes
2

3
tWS_Layer WindowsLayerState = { eWS_Ly1_INTR,
4
                                eWS_Ly2_NONE,
5
                                eWS_Ly3_NONE,
6
                              };


1
tWS_Layer WidwsSt;
2

3
WidwsSt.Ly1 = eWS_Ly1_FW;
4
set_WindowsLayerState(WidwsSt);
1
void set_WindowsLayerState(tWS_Layer ws)
2
{ 
3
   WindowsLayerState = ws;
4
}

Nach dieser Zuweisung haben die anderen Members (Ly2 und Ly3) 
undefinierte Werte, wieso? Sie werden noch niergends gesetzt! Wiederhole 
ich das ganze, ändern die Members wieder auf iergendwelche Werte


Vielen Dank und Gruss!

M.B.
#2869469
Lesenswert?
• ▲
▼
M. B. schrieb:
> undefinierte Werte, wieso? Sie werden noch niergends gesetzt!

Eben deshalb.

Würdest du sie setzen, hätten sie die Werte, auf die du sie gesetzt 
hast.
Wird eine Variable auf keinen Wert gesetzt, hat sie trotzdem einen - 
eben einen undefinierten.

Was erwartest du? Daß du nichts zuweist, und danach trotzdem 42 drin 
steht?
So etwas könnte man in C++ erzwingen, indem man den Konstruktor eines 
Typs passend definiert.
In C gibt es das nicht, also einen Wert definieren (durch 
Initialisierung oder Zuweisung) oder mit undefiniert leben.

Initialisierung z.b. durch:
1
tWS_Layer WidwsSt = { eWS_Ly1_NONE, eWS_Ly2_NONE, eWS_Ly3_NONE };
statt:
1
tWS_Layer WidwsSt;

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.