member in einer structur mit funktion setzen

Gast #6609653
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?
Gast #6609657
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?
#6609787
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
}
Gast #6609867
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren