2016-10-29 4 views
2

Newbie Pointer/Adresse Optimierung Frage.Wie vermeidet man die Variable time_t?

Als Übung schrieb ich diesen Code.

/* ------------------------------------------------------------- 
FUNC : dateplusdays (date plus days) 
      add/substract days to/from date 
      days can be positive or negative 
PARAMS : date (int, format yyyymmdd), days (int) 
RETURNS : date (int, format yyyymmdd) 
REMARKS : 
---------------------------------------------------------------- */ 
int dateplusdays(int date_1, int days) { 

    int year, month, day; 
    int date_2; 
    struct tm time; 
    time_t time_seconds; 

    year = (int) floor(date_1/10000.0); 
    month = (int) (floor(date_1/100.0) - year * 100); 
    day = (int) (floor(date_1) - month * 100 - year * 10000); 

    time.tm_sec = 0; 
    time.tm_min = 0; 
    time.tm_hour = 0; 
    time.tm_year = year - 1900; 
    time.tm_mon = month - 1; 
    time.tm_mday = day; 

    time_seconds = mktime(&time) + days * 86400; 
    time = *localtime(&time_seconds); 

    date_2 = (time.tm_year + 1900) * 10000 + (time.tm_mon + 1) * 100 + time.tm_mday; 

    return date_2; 

} 

nun für die Ausübung Zweck, würde Ich mag diese 2 Zeilen in einer einzigen Zeile setzen, damit die Variable time_seconds vermieden werden.

time_seconds = mktime(&time) + days * 86400; 
    time = *localtime(&time_seconds); 

localtime benötigt die Adresse einer time_t-Variablen. Ich sehe nicht, wie ich den Schritt mit dieser time_t-Variable überspringen könnte.

+3

Nicht stören. Es wird kaum zu einem optimierten Code führen. Schreiben Sie einfach den Code wie er jetzt ist (was wohl einfacher zu lesen ist) und lassen Sie den Compiler (der heutzutage ziemlich gut ist) seine Arbeit machen. – kaylum

Antwort

1

time = localtime((time_t[]){mktime(&time) + days * 86400});

Dies ist eine "Verbindung wörtliche" Herstellung genannt.

+1

Und ist etwa zehn mal so schwer zu lesen wie das Original. Und höchstwahrscheinlich nicht im geringsten effizienter. Nichts für ungut beabsichtigt - schließlich hast du gerade die Frage richtig beantwortet, aber ich würde jeden abfeuern, der so etwas in meinen Code eingebaut hat ... – tofro

+1

stimme ich völlig zu. Ich habe noch nie jemanden in über 15 Jahren C-Programmierung gesehen. Ich weiß nicht einmal mehr, wie ich das weiß. Wahrscheinlich von einer anderen Stackoverflow-Frage. –

Verwandte Themen