Forum: PC-Programmierung member in einer structur mit funktion setzen


von Lars (Gast)


Lesenswert?

Hi,
ich habe eine Struktur für Zeit
file1.h
1
typedef struct
2
{
3
    uint8 seconds_u8;
4
    uint8 minutes_u8;
5
    uint8 hours_u8;
6
    uint8 day_u8;
7
    uint8 month_u8;
8
    uint8 year_u8;
9
}time_ts

file1.c
1
static time_ts time_s;
2
void setTimeSeconds(uint8 seconds_u8)
3
{
4
    time_s.seconds_u8 = seconds_u8;
5
}
6
...

in file2.c
1
#include file1.h
2
3
setTimeSeconds(xx);
4
setTimeMinutes(yy);
5
...

gibt es auch eine Möglichkeit die Funktion so umzuschreiben, dass es nur 
noch eine setter funktion gibt die ich aufrufen kann und welche dann das 
entsprechende member im struct setzt?

von cppbert3 (Gast)


Lesenswert?

Lars schrieb:
> gibt es auch eine Möglichkeit die Funktion so umzuschreiben, dass es nur
> noch eine setter funktion gibt die ich aufrufen kann und welche dann das
> entsprechende member im struct setzt?

ja - nur es gibt tausend Wege das zu erreichen und ist das C oder C++?

Frage: Warum brauchst du das?
-willst du dir Schreibaufwand sparen - macht das nicht
-anderer Grund?

von Luca E. (derlucae98)


Lesenswert?

Lars schrieb:
> gibt es auch eine Möglichkeit die Funktion so umzuschreiben, dass es nur
> noch eine setter funktion gibt die ich aufrufen kann und welche dann das
> entsprechende member im struct setzt?

Aus dem Kopf, ungetestet:

file1.h:
1
typedef enum{
2
    time_member_seconds,
3
    time_member_minutes,
4
    time_member_hours,
5
    time_member_day,
6
    time_member_month,
7
    time_member_year
8
}time_member_t;

file1.c:
1
static time_ts time_s;
2
void setTime(time_member_t member, uint8_t value)
3
{
4
    switch (member){
5
    case time_member_seconds:
6
        time_s.seconds_u8 = value;
7
        break;
8
    case time_member_minutes:
9
        time_s.minutes_u8 = value;
10
        break;
11
    //usw
12
    }
13
}

von PittyJ (Gast)


Lesenswert?

uint8 year_u8;

Das Jahr kann auch größer als 255 sein, z.B. 2021. Dann reicht ein uint8 
nicht mehr aus.

Und was für Probleme es macht, einfach das Jahrhundert wegzulassen, habe 
ich 1999 erfahren.

von N. M. (mani)


Lesenswert?

PittyJ schrieb:
> Und was für Probleme es macht, einfach das Jahrhundert wegzulassen, habe
> ich 1999 erfahren.

Von uns garantiert niemand mehr wenn er sich auch das Jahr 2000 bezieht 
😅

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.