Forum: Mikrocontroller und Digitale Elektronik Werte von struct-member ändern


von Ma B. (drumstick)


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.

von Klaus W. (mfgkw)


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;

von Ma B. (drumstick)


Lesenswert?

Ah, blöd ja klar!

Danke!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.