siehe artikel und beispiele darin![]()
siehe artikel und beispiele darin![]()
Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
nicht.
hmm, da sind in der Diskussion eindeutig zuviele Buchstaben mit unverständlichem Wenn und Aber und teilw auch völlig ohne verständlichen Sinn.
Das hier mit den Hochkommata scheint aber doch am aussichtsreichsten zu sein - oder verstehe ich das falsch:
#define CHOICE 'J'
#if 'J' == CHOICE
//...
nein das Beispiel war einfacher
für den PC sieht dass dann aus dass OPTION_A durch eine 1 und OPTION_B durch eine 2 ersetzt werden und du bei #define SELECTED XXXXXX eine Zahl zur Auswahl eingibtsCode:#define OPTION_A 1 #define OPTION_B 2 ^^^^^^^^^^^^^ das sind deine wortersetzungen für ziffern, man könnte auch enumeration dazu sagen define SELECTED OPTION_A damit triffst du die wahl ... kann auch außerhalb in den compiler settings passieren #if SELECTED==OPTION_A #elif SELECTED==OPTION_B #endif
Du kannst Makros in Makros in Markos in Markso verwenden ... das geht zwar ein wenig zu Weit aber wenn du mal von X Makros hörst, lass dir gesagt sein .. sie sind MÄCHTIG ... aber auch mächtig kompliziert
Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
nicht.
kapier ich nicht, was du damit sagen willst, das ist mir zu hoch und viel zu sehr verkompliziert.
Was geht ist das:
#define TARGET 1
#if TARGET==1
Die Frage ist, ob die Entsprechung für Buchstaben dies hier ist:
#define TARGET 'Z'
#if TARGET=='Z' // ???
entschuldige, noch einfacher kann ich es nicht erklären als dass
#define Option_A 1
bedeutet dass der Begriff "Option_A" durch eine "1" ersetzt wird, also als beispiel zu dem was ich geschrieben habe
#define OPTION_A 1
wenn ich im Code "OPTION_A" schreibe macht er eine "1" draus
#define OPTION_A 1
#define MARKO_1 OPTION_A
#define MAKRO_2 MAKRO_1
....
#define MAKRO_1234 MAKRO_1233
wenn ich jetzt "MAKRO_1234" im Code verwende wird immernoch eine "1" draus, denn MAKRO_1234 = MAKRO_1233 = .... = MAKRO_1 = OPTION_A = 1
also ist #if MAKRO_200==1 > TRUE genauso wie #if MAKRO_200==OPTION_A
wenn dir der begriff enumeration bekannt ist sollte das eigentlich nicht schwer zu verstehen sein
wenn es doch zu kompliziert klingt, akzeptiere bitte meine antwort: "Es geht nicht!" ... ich habe dieses mal sogar von anfang an referenzen serviert um es zu belegen!
Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
nicht.
verstehe ich nicht, warum so kompliziert?
ich habe doch gar keine 3 #define Makros
#define OPTION_A 1
#define MARKO_1 OPTION_A
#define MAKRO_2 MAKRO_1
ich habe lediglich 1 Makronamen
#define TARGET 1
den ich abfragen will, und das soll anstatt Zahlen jetzt Buchstaben abfragen können. also stattdessen
#define TARGET 'Z'
es geht nur über den umweg deine buchstaben als zahlen zu codierenwenn es doch zu kompliziert klingt, akzeptiere bitte meine antwort: "Es geht nicht!"
dann mach halt
#define A 1
#define B 2
#define C 3
ABER (ACHTUNG WICHTIG) bedenke dass JEDES MAL wenn du ein A Schreibst plötzlich eine 1 dafür gesetzt wurd und wenn du B schreibst plötzlich eine 2
Deswegen würde dieser weg keinen sinn machen!
FAZIT (damit kannst du das Thema als erledigt markieren): Es geht nicht, der Precompiler kann nur mit Zahlen arbeiten
Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
nicht.
ok, wenns absolut nicht ginge, wäre es ja ok -
aber in deinem Link schreibt doch einer, dass es doch ginge mit Buchstaben wie 'Q'?
https://stackoverflow.com/questions/...sor-directives
das ist das, was ich hasse, wenn man Diskussionslinks als Antwort auf eine Frage gibt - da antworten dann 100 Leute mit 200 verschiedenen Meinungen....The answere by Patrick and by Jesse Chisholm made me do the following:
#define QUEEN 'Q'
#define JACK 'J'
#define CHECK_QUEEN(s) (s==QUEEN?1:0)
#define CHECK_JACK(s) (s==JACK?1:0)
#define USER 'Q'
[... later on in code ...]
#if CHECK_QUEEN(USER)
compile_queen_func();
#elif CHECK_JACK(USER)
compile_jack_func();
#elif
#error "unknown user"
#endif
Instead of #define USER 'Q' #define USER QUEEN should also work but was not tested also works and might be easier to handle.
(und so kompliziert wie dort ist es ja gar nicht mal bei mir)
deswegen sollte man sich auf die lösung mit dem grünen haken fixieren das ist dann in 99% der fälle die lösung die jeder akzeptiert
wenn du 'Q' schreibst besteht der hauch einer chance dass der precompiler das vorher intern in seine ascii zahl "81" umwandelt, das ist aber keinenfalls standard und funktioniert vermutlich nur mit den allerwenigstens compilern
es geht jedenfalls nicht bis hin zu C11 bzw. C2011 compilern, danach schien der standard wohl neue möglichkeiten zu bieten
die ursprüngliche frage deckt sich exakt mit deiner .. nur ein wenig anders formuliert, schade dass du das so nciht erkennst ... wo wir wieder beim thema "über den tellerrand gucken" wären(und so kompliziert wie dort ist es ja gar nicht mal bei mir)
Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
nicht.
achso, der zitierte Code geht gar nicht bei Arduino C++, weil es nicht standardmäßig bereits C++11 ist? Ist das der Grund?
(was ist ein grüner Haken?)
Lesezeichen