Hallo.
Ich beschäftige mich seit geraumer Zeit mit C++ und bin mittlerweile
dabei eine kleine Bibliothek selber zu erstellen. Mit dem Header
schreiben und einbinden klappt problemlos. Nun bin ich allerdings auf
ein Problem gestoßen für das ich trotz Recherche keine richtige Lösung
finde.
Und zwar möchte ich mit dem Präprozessor zwei unterschiedliche Sätze an
Konstanten (viel mehr Textersetzungen) durchführen. Dazu habe ich im
Header OneWire.h folgenden Code stehen.
1 | #ifndef OVERRIDE
|
2 | #define H 480 //Reset: time for drive bus low
|
3 | #define I 70 //Reset: time for release bus
|
4 | #define G 0 //Reset: delay before reset pulse
|
5 | #else
|
6 | #define H 70 //Reset: time for drive bus low
|
7 | #define I 8.5 //Reset: time for release bus
|
8 | #define G 2.5 //Reset: delay before reset pulse
|
9 | # warning "bus in override mode"
|
10 | #endif
|
Jetzt war die Idee in der main.cpp über
die Konstanten umzuschalten. Die Konstanten werden in der Datei
OneWire.cpp genutzt. Aber dort ist immer nur die erste #if Bedingung
aktiv. Ich habe schon in die main.ii und die OneWire.ii geschaut. In der
main.ii funktioniert die Umschaltung problemlos nur in der OneWire.ii
sind immer nur die ersten Konstanten aktiv zumal dort auch nicht das
Schlüsselwort #define OVERRIDE auftaucht.
Wenn ich allerdings im Microchip Studio unter Toolchain -> C++ Compiler
-> Symbols das Schlüsselwort OVERRIDE eintrage funktioniert es und auch
in beiden *.ii Dateien ist das Schlüsselwort OVERRIDE vorhanden.
Ist es überhaupt möglich per #define und #if Anweisungen über mehrere
Dateien zu arbeiten?
C/C++ ist manchmal echt eine verwirrende Sprache aber ich sage mir halt
immer -selber essen macht dick- weshalb ich mich mich mal durch ein paar
kleinen Projekten quäle. :D