Forum: Mikrocontroller und Digitale Elektronik struct initialisieren


von Martin (Gast)


Lesenswert?

Moin,

wie kann man in c eine struct global initialisieren?
1
typedef struct 
2
{
3
  unsigned char name[NAME_SIZE];
4
        unsigned short size;
5
        unsigned short count;
6
        unsigned char freq;
7
}DEV_LIST; 
8
9
static const struct DEV_LIST devs[] =
10
{"name", 256, 32, 400}    
11
};

Dieser Code bringt mir die Fehlermeldung "incomplete type is not 
allowed".

Gruß
Martin

von Yalu X. (yalu) (Moderator)


Lesenswert?

So, wie du die Struktur deklariert hast (mit typedef), heißt der Typ 
nicht "struct DEV_LIST", sondern einfach nur "DEV_LIST".

von B. S. (bestucki)


Lesenswert?

Versuchs mal so:
1
typedef struct
2
{
3
  unsigned char name[NAME_SIZE];
4
  unsigned short size;
5
  unsigned short count;
6
  unsigned char freq;
7
}DEV_LIST;
8
9
static const DEV_LIST devs[] = {
10
  {"name", 256, 32, 400}
11
};


Noch was:
Die grösste Zahl, die ein unsigned char halten kann ist 255

von Martin (Gast)


Lesenswert?

ah alles klar... danke!

von Georg G. (df2au)


Lesenswert?

was bewirkt die Zuweisung von "400" zu einer char Variablen?

von B. S. (bestucki)


Lesenswert?

Dabei werden nur die niederwertigsten 8Bit gespeichert, der Rest wird 
einfach abgeschnitten. 400 ist gleich 0x190, somit wird nach der 
Zuweisung in einer unsigned char Variable 0x90, also 144 stehen.

In einer char Variable wird -122 stehen -> 2er Komplement

: Bearbeitet durch User
von Rolf Magnus (Gast)


Lesenswert?

be stucki schrieb:
> In einer char Variable wird -122 stehen -> 2er Komplement

Du meinst signed char. Ob char ein Vorzeichen hat oder nicht ist 
compilerspezifisch.

be stucki schrieb:
> unsigned char name[NAME_SIZE];

Übrigens: Warum hier unsigned char statt char?

von B. S. (bestucki)


Lesenswert?

be stucki schrieb:
> In einer char Variable wird -122 stehen -> 2er Komplement

Wollte natürlich -112 schreiben...

EDIT:
Rolf hat natürlich recht. Bei vielen Compilern ist ein char signed, aber 
eben nicht bei allen.

EDIT 2:
>be stucki schrieb:
>> unsigned char name[NAME_SIZE];

Ist nicht auf meinem Mist gewachsen :)

: Bearbeitet durch User
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.