Forum: Compiler & IDEs Arduino: #define in mehreren Dateien verwenden


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Luky S. (luky)


Lesenswert?

Ich habe ein anscheinend simples Problem, aber komme nicht auf eine 
einfache Lösung:
ich brauche einen Versionsstring
1
#define FW_VERSION "3.1.0"
mehrfach im Projekt in unterschiedlichen Dateien.
Wie mache ich das, ohne eine extra .h in jede einzubinden oder geht das 
nicht anders?

von Frank O. (frank_o)


Lesenswert?

Ich verstehe nicht ganz was du meinst, aber irgendwie würde sich 
"switch" dafür anbieten. Zumindest so wie ich das verstanden habe.

von Mike R. (thesealion)


Lesenswert?

Das
1
#define ...
in einer .h Datei mit entsprechenden include guards und die Datei dann 
in allen Modulen einbinden, die die Versionsnummer brauchen.

Das sollte man nicht anders machen und ist auch der beste Weg um einen 
überblick über die Beziehungen zu behalten.

von Hmmm (hmmm)


Lesenswert?

Luky S. schrieb:
> Wie mache ich das, ohne eine extra .h in jede einzubinden oder geht das
> nicht anders?

Es geht auch als Compiler-Parameter (-D).

von Luky S. (luky)


Lesenswert?

Ich habs jetzt mit der extra .h gemacht, danke, funktioniert!

von Joachim B. (jar)


Lesenswert?

Luky S. schrieb:
> extra .h

sagt dir aber irgendwann nicht mehr worum es geht!, warum nennst du die 
Datei nicht richtig:

fw_version.h

wenn sie sich sogar ändern kann dann richtiger

fw_version_3_1_0.h

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Joachim B. schrieb:
> fw_version_3_1_0.h

Das wäre aber eine ziemlich unpraktische Benamung, weil man mit jeder 
neuen Version überall im Projekt die #includes anpassen muss.

Einfach version.h

von Veit D. (devil-elec)


Lesenswert?

Hallo,

man könnte das #define vor allen #includes<> platzieren.

von Bruno V. (bruno_v)


Lesenswert?

Luky S. schrieb:
> Ich habs jetzt mit der extra .h gemacht, danke, funktioniert!

Du wirst recht schnell feststellen, dass noch weiter Sachen zentral 
gebraucht werden. Schalter für Module, Debuginfos, Konfiguration.

Nenne die Datei, die Du überall einbindest, ruhig config.h oder appl.h 
oder project.h oder so.

Und dann wirst Du feststellen, dass Du eine Version in dem Format 
vermutlich doch nicht mehrfach brauchst

von Flunder (flunder)


Lesenswert?

Veit D. schrieb:
> man könnte das #define vor allen #includes<> platzieren.

Oh Mann ! Meist wird ja schon vergessen, die eine Versionsnummer bei 
Änderungen hochzuzählen. Da nimmt man also 12 verschiedene und lässt 
sich überraschen, wann welche gezählt wurde.

Natürlich gehört das in eine .h - Datei. Genau dafür sind die da !

Und wenn es dann immer noch nicht funktioniert (mit dem Zählen bei den 
Programmierern), wird die Datei im Build-Prozess von Subversions 
subwcref.exe generiert.

von Veit D. (devil-elec)


Lesenswert?

Hallo,

es ging genau um ein Einziges #define. Warum bauschst du das jetzt so 
auf? Ob das eine #define in der main.c/cpp am Anfang steht oder in eine 
.h verschoben wird und diese .h als erstes inkludiert wird ist Jacke wie 
Hose. Man sollte das praktisch sehen.

: Bearbeitet durch User
von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Flunder schrieb:
> Veit D. schrieb:
>> man könnte das #define vor allen #includes<> platzieren.
>
> Oh Mann ! Meist wird ja schon vergessen, die eine Versionsnummer bei
> Änderungen hochzuzählen. Da nimmt man also 12 verschiedene und lässt
> sich überraschen, wann welche gezählt wurde.
>
> Natürlich gehört das in eine .h - Datei. Genau dafür sind die da !

Wenn man eine .h die z.B. Versionskennungen enthält in allen Modules 
includieren will und sicher gehen will, dass man sie in keinem (neuen) 
Modul vergisst, kann man auch im Makefile:
1
gcc ... -include version.h ...
und der Header wird automatisch includiert.

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.