Ein prä-Prozessor ist eine "dumme" Text-Ersetzungs-Maschine.
Setze einfach mal den zu ersetzenden text selbst ein in deinen Ausdruck,
und überlege was passiert.
Wenn du einen Ausdruck findest, welcher durch text-Ersetzung deine
gewünschte Aktion durchführt, dann hast du dein Problem gelöst.
Böse Falle: Der Präprozessor kann nicht addieren, außer in der #if
Anweisung.
Deinen Fall könnte man mit Textersetung erschlagen - das funktioniert
natürlich nicht für z2>9. Für sowas wie eine Versionsnummer reicht das
aber.
Al3x schrieb:> //Was ich brauche muss aber „0x102“ sein
Das bezweifle ich. Das ist nur das, was du willst.
Kein Mensch braucht einen String im Speicher, der die Firmware in
BCD-Darstellung mit führendem 0x beinhaltet. Was brauchst du denn
wirklich? Was soll denn mit diesem String später passieren? Warum muss
die Firmwareversion überhaupt als String abgespeichert sein?
Als Ersatz könntest du vor dem kompilieren einen Script automatisch
laufen lassen der dir die Strings in ein C File generiert. Den kannst du
dann einfach kompilieren.
Den Script musst du aber so schreiben dass der seine Inputdaten
irgendwie geschickt bekommt. C File parsen geht auch, dann bist du
schnell dabei deinen eigenen preprocessor zu schreiben. Also eher Text
File lesen oder C file Zeilen basiert lesen und suchen.
Geht um C oder C++ ?
In C++ kannst Du diese Umwandlung zur Compilezeit in ein
constexpr-String bzw. constexpr-Array machen.
Aber auch ich bezweifle, dass Du das überhaupt brauchst ...
Der Preprocessor alleine kann das nicht. Aber er kann Dir helfen
Monstermakros zu bauen, die dem Compiler Konstanten vorgeben, die er zur
Compilierzeit auflösen kann :
Lothar M. schrieb:> Kein Mensch braucht einen String im Speicher, der die Firmware in> BCD-Darstellung mit führendem 0x beinhaltet.
Reiht sich irgendwann hinter
> 640k ought to be enough for everybody
ein. ;-)
fop schrieb:> Lothar M. schrieb:>> Kein Mensch braucht einen String im Speicher, der die Firmware in>> BCD-Darstellung mit führendem 0x beinhaltet.> Reiht sich irgendwann hinter>> 640k ought to be enough for everybody> ein. ;-)
Auch eine Art berühmt zu werden... ;-)
Aber es ist tartsächlich so, dass ich auch mit größter mentaler
Anstrengung nicht verstehe, wozu man so einen String im Speicher
brauchen könnte. Das sieht mir eher aus, als ob da wer die
Zahlendarstellung und die Zahlensysteme miteinander verknotet hätte.
Also mir fällt da spontan <Unified Diagnostic Services (UDS; deutsch
etwa „vereinheitlichte Diagnosedienste“)>[Zitat aus Wikipedia] ein. Im
besonderen der Dienst Nummer 0x22 Read by identifier.
Du glaubst gar nicht, was Deine Kunden da alles auslesen können wollen.