Struct füllen in C, kurzschreibweise ?

#include <Time.h>
tmElements_t  F_tag;
time_t anfang;
....

F_tag.Day=7;
F_tag.Year=2012-1970;
F_tag.Month=5;
F_tag.Second=0;
F_tag.Minute=0;
F_tag.Hour=7;
anfang=makeTime(F_tag);

Habe dies in meinem Code, und bin sicher es geht auch anders.
In Delphi gibt es für sowas: with

with F_tag do
   begin
     Day := 7;           
     Year  := 2012-1970;
...
   end;

C wäre nicht C wenn es dazu nicht was ähnliches gäbe, entweder suche ich falsch - jedenfalls finde ich nichts :blush:
Ich denke es reicht ein Posting von euch aus mir zu zeigen was ich da machen muss 8)

PS:
Es Funktioniert so zwar auch, aber mir gefällt es nicht

Felder sind Arrays. Was du da hast ist ein struct/Struktur.

Felder sind Arrays. Was du da hast ist ein struct/Struktur.

Ich meinte die Elemente, in Delphi wäre sowas ein record.

Hast natürlich Recht, werde es ändern.

Du meinst wahrscheinlich ein Comound Literal:

F_tag = (tmElements_t) {.Day=7, .Year=2012-1970, .Month=5, .Second=0, .Minute=0, .Hour=7};

Jetzt kommt der Haken: das ist ein C99 Konstrukt und wird von avr-gcc nicht so ohne weiteres unterstützt

Ich habe schon mal versucht in VisualMicro -std=c99 zu setzen, aber das bringt anscheinend nichts. Vielleicht mache ich auch irgendwas falsch

rudirabbit:
Habe dies in meinem Code, und bin sicher es geht auch anders.

Während der Deklaration kannst Du direkt zuweisen:

#include <Time.h>
tmElements_t  F_tag={7,2012-1970,5,0,0,7};
time_t anfang;

Nachtrag/Korrektur:
Bei der Aktion “namenlose Zuweisung” mußt Du die Parameter natürlich in exakt derselben Reihenfolge zuweisen, in der sie in tmElements_t deklariert sind, also:

Second; Minute; Hour; Wday;  Day; Month; Year;   // Year is offset from 1970;

Also ist die korrekte Zuweisung bei der Initialisierung entsprechend Deinem Beispiel:

tmElements_t  F_tag={0,0,7,0,7,5,2012-1970};

(Den von Dir nicht angegebenen Wochentag mal mit 0 angesetzt.)

Das wird in c++ auch gern über einen oder mehrere passende Konstruktoren gemacht

tmElements_t F_tag( 2012, 5, 7);  // 7. Mai 2012
tmElements_t F_tag( 2012, 5, 7, 8, 30);  // 7. Mai 2012 8:30

Da könnte der Konstruktor auch die Jahreszahl-Umrechnung -1970 erledigen, Werte prüfen, etc.

Müsstest dir aber bei Bedarf deine eigene time.h anpassen

typedef struct {
  byte Year, Month, Day, Hour, Minute, Second;
  tmElements( word y, byte m, byte d) {
    Year=y-1970; Month=m; Day=d;
    Hour=Minute=Second=0;
  }
  tmElements( word y, byte m, byte d, byte h, byte mn , byte s=0) {
    Year=y-1970; Month=m; Day=d;
    Hour=h; Minute=mn; Second=s;
  }
} tmElements_t ;