Probleme mit ctime
-
Hallo zusammen,
ich beschäftige mich gerade mit der Headerdatei ctime. Um die aktuelle Zeit und das aktuelle Datum herauszufinden, benutze ich folgenden Code:#include <iostream> #include <ctime> using namespace std; int main() { time_t Zeitstempel; tm *nun; Zeitstempel = time(0); nun = localtime(&Zeitstempel); cout << nun->tm_mday << '.' << nun->tm_mon+1 << '.' << nun->tm_year+1900 << " - " << nun->tm_hour << ':' << nun->tm_min << endl; }Nun habe ich ein paar Fragen dazu:
1.) Warum muss "nun" ein Zeiger auf tm sein? Anderenfalls gibt es eine Fehlermeldung!
2.) Warum ist der Typ "tm" bereits in Zeile 2 bekannt? Eigentlich kommt das struct doch erst durch die Methode "localtime".
3.) Wie macht die Headerdatei ctime das Zeitauslesen? Wie erhält es die Sekunden vom 1.1.1970?
Vielen Dank für eure Hilfe
lg, freakC++
-
> 1.) Warum muss "nun" ein Zeiger auf tm sein? Anderenfalls gibt es eine Fehlermeldung!
Weil die Funktion eine Adresse zurückgibt, die nur von Pointern gespeichert werden können und nicht von einem Objekt dieses Typs tm. Warum sie eine Adresse zurückgibt? Das ist implementierungs- u. betriebssystemspezifisch und hängt damit zusammen, dass es sich bei diesen Zeitdaten um Ressourcen in bestimmten Speicherbereichen handelt. Außerdem ergibt es keinen großen Sinn, die "Zeit zu kopieren".
> 2.) Warum ist der Typ "tm" bereits in Zeile 2 bekannt? Eigentlich kommt das struct doch erst durch die Methode "localtime".
Was meinst du mit "bekannt"? Bekannt ist es, sobald du <ctime> einbindest. Selbstverständlich ginge auch das (mit der Regel, Objekte erst zu definieren, wenn man sie braucht):
time_t Zeitstempel = time(0); tm* nun = localtime(&Zeitstempel);> 3.) Wie macht die Headerdatei ctime das Zeitauslesen?
Sie fragt ganz lieb die API-Funktionen des jeweiligen Betriebssystems. Das geht aber über den Standard weit hinaus.
> Wie erhält es die Sekunden vom 1.1.1970?
Durch einen immer tickenden Counter in dichter Hardwarenähe.

-
Alles klar! Viele Dank für deine Antwort. Du hast mir geholfen.
lg, freakC++