Forum: Mikrocontroller und Digitale Elektronik xc32-gcc structure vordefinieren.


von Simon (Gast)


Lesenswert?

Ich habe:
1
typedef union
2
{
3
  struct
4
  {
5
    unsigned char  wday;    // day of the week, 00-06
6
    unsigned char  mday;    // day of the month, 01-31
7
    unsigned char  mon;    // month, 01-12
8
    unsigned char  year;    // years, 00-99
9
  };                // field access
10
  unsigned char    b[4];    // byte access
11
  unsigned short    w[2];    // 16 bits access
12
  unsigned long    l;      // 32 bits access
13
}realDate;
14
15
16
// Wie kann ich hier ein datum vordefinieren?
17
// z.B. date_now.wday = 1;
18
static realDate date_now;

von nand (Gast)


Lesenswert?

genau
1
#include <stdio.h>
2
#include <stdlib.h>
3
4
typedef union
5
{
6
  struct
7
  {
8
    unsigned char  wday;    // day of the week, 00-06
9
    unsigned char  mday;    // day of the month, 01-31
10
    unsigned char  mon;    // month, 01-12
11
    unsigned char  year;    // years, 00-99
12
  };                // field access
13
  unsigned char    b[4];    // byte access
14
  unsigned short    w[2];    // 16 bits access
15
  unsigned long    l;      // 32 bits access
16
}realDate;
17
18
int main()
19
{
20
    static realDate date_now;
21
    date_now.wday = 1;
22
    date_now.mday = 2;
23
    date_now.mon = 3;
24
25
    printf("%s %x\n",date_now.b,date_now.l);
26
27
28
    return 0;
29
}

von Simon (Gast)


Lesenswert?

ja, das geht schon ich meinte bei der deklaration schon, sowas wie
1
static int z = 500;
2
3
4
static realDate date_now = ??

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Das Stichwort lautet Initiaisierung.

Hier unterscheiden sich C89 und C99 - was Du erreichen möchtest, ist in 
C89 nicht möglich (da ist die union hinderlich).
In C99 kann bei der Initialisierung explizit geschrieben werden, 
welches Element initialisiert werden soll.

von MM (Gast)


Lesenswert?

1
realDate d={1,2,3,70}; // setzt wday=1,..,year=70

Unions können unter C89, C90 usw. mit einer Liste intitialisiert werden. 
Allerdings kann immer nur das erste Element einer Union auf diese Weise 
inititalisiert werden (also der Struct am Anfang).

Die explizite Initialilisierung einzelner Member ist mit C99 möglich. Da 
du aber offensichtlich gcc verwendest (wo u.a. auch die struct member 
ohne Namne erlaubt sind..), kannst du das auch im C90 Modus verwenden. 
Siehe auch:

https://gcc.gnu.org/onlinedocs/gcc/Designated-Inits.html

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.