<<



  • Hallo,

    Mach mal das Semikolon am Enden deines defines weg oder noch besser lass das define ganz weg und nimm statt dessen eine Funktion.



  • jo danke

    🙂 will da auch net dafür verwenden - wollte mich nur mal an makros versuchen 😛



  • #define == BÖSE
    nimm es weg, [h]bitte[/h] 😮



  • brot-knusprig schrieb:

    jo danke

    🙂 will da auch net dafür verwenden - wollte mich nur mal an makros versuchen 😛

    "Nee, ich will gar nicht meine Oma vom Balkon schubsen ... ich versuche mich nur mal dran !" 😉

    Übe doch was Vernünftiges. :p

    Gruß,

    Simon2.



  • 😛 najo - lieber ich probiers im kleinen aus - bevor ichs dann beim großen falsch mache



  • Einfach etwas schlecht zu reden ohne Begründung ist nicht sonderlich sinnvoll.

    Makros sind gefährlich weil sie eine einfache Textersetzung vornehmen. Das kann zu Fehler (zur Compiletime oder zur Runtime) führen die nur sehr schwer zu verstehen sind, da man den Code der kompiliert wird nicht direkt sieht.

    Dein Programm ist ein sehr schönes Beispiel weshalb man Makros meiden sollte, wenn es möglich ist. Die Fehlermeldung verwirrt dich, da der Compiler einen anderen Quellcode sieht als du. Um den Fehler zu verstehen musst du die Textersetzung im Kopf selbst durchführen (und laufst dabei Gefahr den Fehler zu übersehen).

    Sinnvoll sind Makros dann wenn es wichtig ist, dass der Code direkt an dieser Stelle steht, das wäre zum Beispiel eine Debug-Info mit Quelldatei und der Zeile. Sowas geht nur mit Makros. Oder wenn du wirklich Textersetzungen durchführen willst, z.B. den/die übergebenen Parameter zusammenhängen/in strings umwandeln als eine zusätzliche Information bei einer Fehlermeldung.



  • Noch nen Tipp:

    Wenn du einen Fehler der durch ein Makro erzeugt wird partout nicht finden kannst, dann bieten dir die meisten Compiler die Möglichkeit die Quelldatei auszugeben nachdem der Präprozessor darübergelaufen ist. So hast du die Möglichkeit die Datei zu sehen wie sie der Compiler sieht.



  • ok danke 🙂



  • Braunstein schrieb:

    Hallo,

    Mach mal das Semikolon am Enden deines defines weg oder noch besser lass das define ganz weg und nimm statt dessen eine Funktion.

    wenn du auf define bestehst dann mach deine funktion noch als inline



  • #define ist genau dort böse wo es durch Funktionen/Klassen/Konstanten/... ersetzt werden könnte.
    #define ist aber (wie fast alles in C++) nicht generell böse.

    Bevor ich z.B. 3 Zeilen 3x kopiere die sich bloss durch "__stdcall" vs. "__fastcall" vs. "__cdecl" unterscheide, mache ich das lieber über ein lokales #define.
    Oder um 20 Zeilen Glue-Code in 2 oder 3 Klassen zu wiederholen den ich nicht durch Vererbung oder sonstwas reinbringen kann (weil ich z.B. virtuelle Funktionen überschreiben muss) ... dann nehme ich auch mein #define.

    Oder ganz allgemein: wenn die einzige Möglichkeit die Wiederholung von Code zu vermeiden ein #define ist, dann bin ich froh dass es das gibt, und verwende es auch.


Anmelden zum Antworten