Forum: Mikrocontroller und Digitale Elektronik C Kompiler Marco


von Jan H. (janiiix3)


Lesenswert?

Nabend,
1
#define BUILD_YEAR_CH0 (__DATE__[ 7])
2
#define BUILD_YEAR_CH1 (__DATE__[ 8])
3
#define BUILD_YEAR_CH2 (__DATE__[ 9])
4
#define BUILD_YEAR_CH3 (__DATE__[10])

Kann ich das irgendwie zum funktionieren bringen?
Ich möchte quasie das Kompilier Datum speichern.

Der Kompilier meckert natürlich das es keine Konstante ist.
Gibt es eine bessere Möglichkeit?

Schon mal jedem einen guten Rutsch ;)

von Georg G. (df2au)


Lesenswert?

Was spricht gegen
1
char   s_date[] = __DATE__;
kostet ein paar Byte mehr Platz, sollte aber tragbar sein.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Jan H. schrieb:
> Gibt es eine bessere Möglichkeit?

Gugel mal danach.  Es gibt da einige Vorschläge im Netz.

Das Problem sind natürlich nicht die Makros, sondern die Stellen, an
denen du sie benutzt.

von Yalu X. (yalu) (Moderator)


Lesenswert?

An dem von dir geposteten Code wird der Compiler nichts auszusetzen
haben. Wahrscheinlich versucht du aber woanders, die Macros in der
Initialisierung einer statischen Variablen zu nutzen, was in C nicht
geht (in C++ schon).

Jan H. schrieb:
> Gibt es eine bessere Möglichkeit?

Möglicherweise. Das hängt davon ab, was mit dem Datum letztendlich
geschehen soll.

von Jan H. (janiiix3)


Lesenswert?

Yalu X. schrieb:
> An dem von dir geposteten Code wird der Compiler nichts auszusetzen
> haben. Wahrscheinlich versucht du aber woanders, die Macros in der
> Initialisierung einer statischen Variablen zu nutzen, was in C nicht
> geht (in C++ schon).
>
> Jan H. schrieb:
>> Gibt es eine bessere Möglichkeit?
>
> Möglicherweise. Das hängt davon ab, was mit dem Datum letztendlich
> geschehen soll.

Wollte die in einem String zusammen speichern.

von Jan H. (janiiix3)


Lesenswert?

Dann kann ich das kompilierungs Datum nicht so einfach in einer 
Variablen speichern?

von Yalu X. (yalu) (Moderator)


Lesenswert?

Jan H. schrieb:
> Dann kann ich das kompilierungs Datum nicht so einfach in einer
> Variablen speichern?

Doch:

1
char date[] = __DATE__;

Wenn du einen Substring von _DATE_ extrahieren möchtest, geht das nur
zur Laufzeit, also bspw. so:

1
#include <string.h>
2
3
char year[5];
4
5
int main(void) {
6
  strcpy(year, __DATE__+7);
7
}

von Joachim B. (jar)


Lesenswert?

Yalu X. schrieb:
> geht das nur
> zur Laufzeit, also bspw. so:

Danke hat in meinem Programm 150 Byte flash gespart, nicht das ich sie 
jetzt gebraucht hätte, aber man weiss ja nie!

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.