was bringt #define und #undef



  • Skym0sh0 schrieb:

    wobei den fehler mit ++x kann man auch gut umgehen wenn man es einfahc ganz weglässt, denn so bleibt auch alles shcön übersichtlich

    behauptest du gerade man soll ++ und -- generell meiden...?



  • nein

    in for schleifen ist das ok
    aber es gibt ja so spezialisten die die operatoren 5 mal in einer zeile zusammen mit if while und was weis ich verwenden...

    sowas kann lassen und spart sich dann die arbeit auch bei den makros drauf zu achten

    ich benutze das auch gerne, aber dann steht alleine in einer zeile, in der for schleife oder maximal bei irgendwelchen idices von arrays



  • Skym0sh0 schrieb:

    ich benutze das auch gerne, aber dann steht alleine in einer zeile, in der for schleife oder maximal bei irgendwelchen idices von arrays

    foo[++i]
    ist also ok, aber
    foo(++i)
    nicht?



  • Sag' ihm doch einfach, worauf du hinauswillst und gut is 😉

    Nebenbei, eine Variable darf zwischen zwei sequence points nur einmal geändert werden (also im Normalfall nur einmal im ganzen Ausdruck), sonst gibt's undefiniertes Verhalten.



  • Wo wir gerade dabei sind: Was gilt alles als Sequenzpunkt? Komma-Operator, und weiter?



  • Nexus schrieb:

    Wo wir gerade dabei sind: Was gilt alles als Sequenzpunkt? Komma-Operator, und weiter?

    http://www.c-plusplus.net/forum/viewtopic-var-p-is-1570628.html#1570628



  • Skym0sh0 schrieb:

    du kannst dem präprozessor sagen dass er für das compilen relavante variablen erzeugen soll, die haben absolut keine auswirkungen auf den richtigen runtime quellcode

    Wenn dem so wäre, so könnte man sie auch weglassen 😉

    Was du sicher sagen willst: sie tauchen im Quellcode den der Compiler erhält nicht mehr auf, da der Präprozessor diese verarbeitet und das Ergebnis einfügt.



  • -.-

    jeder weis was ich meine...
    jungs ich bin in der 12. klasse und ahbe mathe/physik LK und KEIN deutsch LK

    ich bin kein guter redner und ausdrücken kann ich mich auch nicht so gut

    also hackt nicht so auf mir rum 😢 😢 😢

    @toni: ja genau so 😃
    nein jetzt mal ehrlich ich mag sowas nicht:

    while ( arr[++i] = foo(*(arr+i-1)) != pow(vec[(j++ - ++l)], ++k) );
    

    ok, ist auch kein gutes beispiel, aber sowas is einfahc nur hässlich und unübersichtlich, toll man hat die skills 20 anweisungen in eine zeile zu packen aber wo is der bus mit den leuten die das interresiert?

    aber ma unter uns: jeder solls so amchen wie ers meint
    ich mache öfters mal den hier: a[++i]
    aber sowas mache ich eig nie: a(++i)


  • Administrator

    Skym0sh0 schrieb:

    sowas kann lassen und spart sich dann die arbeit auch bei den makros drauf zu achten

    Ich habe eine bessere Idee. Lieber gleich solche Makros lassen, dann kannst du den Operator nutzen und musst nicht mal dran denken. Für sowas sind Makros einfach nicht gedacht, punkt und aus.

    Und zu dem Zeug mit der Unübersichtlichkeit:
    Aber das hat doch nichts mit dem In- oder Dekrementierungsoperator zu tun. Diese Zeile ist einfach so unübersichtlich. Man sollte Formeln auseinander nehmen und Schrittweise durcharbeiten. Hilft auch unheimlich beim Debuggen und der Compiler kann es so oder so durchoptimieren.

    Skym0sh0 schrieb:

    ich mache öfters mal den hier: a[++i]
    aber sowas mache ich eig nie: a(++i)

    Darf ich fragen wieso? Warum siehst du da einen Unterschied und wie machst du das Untere dann?

    Grüssli



  • ++i;
    a(i);


  • Administrator

    Skym0sh0 schrieb:

    ++i;
    a(i);

    igitt 🙂
    Und wenn du sowas brauchst?
    a(i++);
    Sag mir nicht, dass du dann das hier machst?
    int t = i++;
    a(t);

    Grüssli



  • a[++i] == a.operator[](++i)

    also erschließt sich mir der Sinn nicht.
    Nur weil du angst vor makros hast oder was ist der Grund?

    Wenn ein a[++i] Sinn macht, dann macht auch ein a.foo(++i) Sinn. Die Frage ist ob das ++i Sinn macht. Wenn man es braucht, dann bitte verwenden.


Anmelden zum Antworten