#define



  • case ',': { // Liniensensor
                       printf("LI=%03d VL=%d RT=%d GN=%d\n\r",
                         val_Farbe, 
                         WERT_Schwarz() ? 1 : 0,
    					 WERT_Rot() ? 1 : 0,
                         WERT_Gruen() ? 1 : 0,
    					 robot.digital(SENSD_BumperLinks),
                         robot.digital(SENSD_BumperRechts) );
                     break;}
          case '.': { // Kalibrierungswerte
    #if Kalibrierung_im_Programm    
                   printf("SW=%03d S=%03d W=%03d R=%03d G=%03d\n\r",cal_schwarz_weiss, cal_schwarz, cal_weiss, cal_rot, cal_gruen);
    #endif
                   printf("R-=%03d R+=%03d G-=%03d G+=%03d S-=%03d S+=%03d\n\r",
    			         WERT_Rot_min, WERT_Rot_max, WERT_Gruen_min, WERT_Gruen_max, WERT_Schwarz_min, WERT_Schwarz_max);
    				 break;}
    

    Hier sind die WERT_****s
    und die Schwarz_mins und so habe ich schon (ja ich habe die Frage dumm gestellt)

    aber wie mach ich das, dass "WERT_Schwarz" und so bei dem #define richtig angegeben sind?



  • Mit #define erreichst du lediglich eine Textersetzung, die vor dem Kompilieren stattfindet (durch den Präprozessor). Das heißt also, überall wo in deinem Code "WERT_Schwarz" vorkommt, wird es durch "(190 <= x <= 255)" ersetzt.



  • Nexus schrieb:

    Du willst also, dass der Compiler (oder sogar Präprozessor) dir zufällig irgendeinen Wert in den Grenzen auswählt? So einfach ist das nicht... 😉

    ...sondern noch viel einfacher, indem du selbst einen konkreten Wert festlegst. Oder geht es dir ums Prüfen, ob die Konvention eingehalten wurde?

    Abgesehen sollte man für Konstanten in C++ keine Makros nehmen, da diese einige Probleme aufweisen. Und ein gutes Buch würde nicht schaden, wenn du kein Anfänger bleiben willst. 🙂

    Ich habe im Moment nicht so richtig die Zeit für ein gutes Buch, ansonsten hätte ich ja nicht hier gefragt!



  • _matze schrieb:

    Mit #define erreichst du lediglich eine Textersetzung, die vor dem Kompilieren stattfindet (durch den Präprozessor). Das heißt also, überall wo in deinem Code "WERT_Schwarz" vorkommt, wird es durch "(190 <= x <= 255)" ersetzt.

    GENAU und wie kriege ich das hin? Mein SCH**** Compiler sagt immer, dass das nicht geht, weil das "x" nicht definiert ist...



  • Schau dir mein Beispiel an. Dort siehst du, wie man es richtig macht.



  • Indian_Foxx schrieb:

    Ich habe im Moment nicht so richtig die Zeit für ein gutes Buch, ansonsten hätte ich ja nicht hier gefragt!

    Aha. 🙄

    Indian_Foxx schrieb:

    GENAU und wie kriege ich das hin? Mein SCH**** Compiler sagt immer, dass das nicht geht, weil das "x" nicht definiert ist...

    Klar, der Compiler ist Mist, am meisten, weil er bei dem Präprozessorvorgang so starkt involviert ist. :p

    Wie willst du was hinkriegen? Wie man eine einfache Zahl per #define festlegt, habe ich ja erwähnt und das kannst du auch schön an den anderen Zeilen ablesen. Dass es in C++ bessere Möglichkeiten gibt, wurde aber auch schon gesagt.



  • drakon schrieb:

    Schau dir mein Beispiel an. Dort siehst du, wie man es richtig macht.

    Yeah, das sehe ich ja schon, aber gibt es wiklich KEINE EINZIGE Möglichkeit das mit der "#define" zu machen? Ansonsten muss ich 3 A4 Seiten umschreiben o.O!



  • Die definierten Konstanten kannst du genau gleich so stehen lassen. Du kannst von mir auch das redundante "WERT_" wieder vorne ranhängen.

    Und für die Schwarzwerte nimmst du einfach einen int und nachdem du den Wert erhalten hast, machst du Boundchecks. (Das kann, wie ich bereits gezeigt habe automatisiert werden..)



  • Oah... Ich gebs einfach auf und gut ist 😃

    Das kriege ich doch nie im Leben hin...
    (Muss mir wirklich etwas durchlesen... Aber das wird erst dann kommen, wenn das alles schon vorbei ist.)



  • Tja, von 0 auf 100 geht nunmal nicht. Bei C++ noch weniger als bei den meisten Sprachen. Du wirst dich damit anfreunden müssen, dass du ohne das Grundlagen-Lernen nicht weit kommen wirst... 🙂



  • Das wusste ich schon am anfang, aber ich wurde damit verdonnert und das muss halt bis Donnerstag sitzen 😃


Anmelden zum Antworten