Compilezeit und -datum als Integer, ähnlich __DATE__

Gast #3396958
Lesenswert?

Gibt es eine Möglichkeit, Compilezeit/-datum zur Compilezeit als 
Konstante zu erhalten? Als String ist das Ganze leider volliger Overkill 
und verbraucht zu viel Speicher. Ich brauche eigentlich nur einen 
simplen Timestamp, wie ihn der Compiler ja irgendwo haben muss. Nur, wie 
komme ich da ran?
Moderator Persönliche Seite #3397015
Lesenswert?

heiner schrieb:
> Puh, also zu allererst ist ein Timestamp universell, kompatibel, lässt
> sich ohne Aufwand umrechnen, ...

Leider wissen wir nicht so recht, wann unser Universum genau entstanden
ist (Urknall), folglich haben wir keinen bekannten Fixpunkt für einen
Zeitstempel (anders als bspw. die Temperatur).

Alle anderen Bezugssysteme reichen nur eine mehr oder minder endliche
Zeit zurück und haben damit zumindest gegenseitige Offsets, die man
verwalten muss, egal, ob man das nun an der Geburt eines Propheten,
dem Erscheinen eines Betriebssystems oder was auch immer festmacht.

Finde dich einfach damit ab, dass du dir einen Zeitstempel in der
Skalierung deiner Wahl selbst organisieren musst.
Gast #3397073
Lesenswert?

moin, moin,

mir reicht ein Timestamp für das komplette Programm, also nicht einer 
pro Quell-Datei. Den kann (sollte) der Linker einbauen. Dazu gibt's im 
Makefile zwei Zeilen:
1
NOW= `date +%s`
2
CFLAGS= -Wl,-defsym=BUILD_TIME=$(NOW)

im Programm gibt's dann diese seltsame Konstruktion, aber im Endeffekt 
kann ich den Zeitpunkt des make-Aufrufs ganz normal verwenden:
1
extern int  BUILD_TIME;
2
time_t  build_time = (time_t)&BUILD_TIME;

Ich würde aber auch eine elegantere Methode verwenden ;)
Gast #3397074
Lesenswert?

Ins makefile:
1
gcc -D_BUILD_TIME=`date +%s`
In eine zentrale Headerdatei oder jede .c Datei:
1
extern const time_t BUILD_TIME;
In eine .c Datei:
1
const time_t BUILD_TIME = _BUILD_TIME;
So kann von jeder Stelle im Code "BUILD_TIME" als 
Programmspeicher-Konstante verwendet werden.

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