c++ alternative zu define



  • Hallo allerseits,

    ich benutze in meinem Projekt mehrere define Variablen, um mich in einigen if-Verzweigungen nicht jedesmal mit stumpfen Zahlen herumschlagen zu müssen. Lesbarer Code ist mir sehr wichtig 🙂

    Naja, in meiner jugendlichen Naivität dachte ich jetzt daran, die globalen defines in meiner main Datei in const int umzuwandeln - macht man das einfach so oder gibt es andere, schönere/standardmäßigere Lösungen?

    ..ach ja, wo wir grad dabei sind - es ist (für meine Verhältnisse) ein großes Projekt mit ca 7000 Zeilen Code. Wie schon gesagt habe ich viele define-Variablen - gibt es einen bestimmten Ort, wo man diese defines reinschreibt? Zum Beispiel eine extra include Datei?

    Danke schonmal!



  • c++ variante wäre wohl enum



  • Globale Variablen sind generell nicht sehr schön und können meistens umgangen werden.

    Aber grundsätzlich:
    ➡ const int , wenn es sich um eine einzelne, unabhängige Variable handelt.
    ➡ enum , wenn eine Aufzählung (Diskussion darüber) benötigt wird.



  • Ah, super, vielen Dank dafür!

    Enum kenne ich natürlich auch, habe es aber praktisch noch nie benutzt - damit kann ich aber einige meiner defines zusammenfassen.

    Kurz zu den globalen Variablen - also ich weiß da um die Problematik, aber ist es nicht manchmal sinnvoll, so ein define global für alle Funktionen zu definieren als in jeder Funktion jedesmal aufs neue?
    ..naja, ich seh schon, einen klaren "richtigen" Weg gibts da wohl nicht.

    Danke nochmal bis hierhin 👍



  • pommes schrieb:

    Kurz zu den globalen Variablen - also ich weiß da um die Problematik, aber ist es nicht manchmal sinnvoll, so ein define global für alle Funktionen zu definieren als in jeder Funktion jedesmal aufs neue?

    So, wie Du es beschreibst auf keinen Fall. Globale Variablen sollte man überhaupt nur dann in Erwägung ziehen, wenn mehrere Funktionen auf die selbe Variable zugreifen müssen. Und selbst dafür gibt es bessere Dinge als globale Variablen.
    Wenn die Variablen immer nur innerhalb der jeweiligen Funktion benötigt werden, sollte man sie auch immer innerhalb der Funktion anlegen.



  • Du wirst die Variablen bzw. defines sicherlich nicht global, also überall im Code anwenden sondern immer nur in einem bestimmten Kontext. Insofern solltest du die Gültigkeit auch auf eben diesen Kontext beschränken, und zwar als Konstante und nicht als define. Einer der ersten Topics in Scott Meyers' Effective C++ behandelt das Thema defines (und deren Nachteile) etwas ausführlicher.



  • pommes schrieb:

    also ich weiß da um die Problematik, aber ist es nicht manchmal sinnvoll, so ein define global für alle Funktionen zu definieren als in jeder Funktion jedesmal aufs neue?

    Nein, es ist höchstens bequem. Selbst veränderliche Variablen kann man als Zeiger oder Referenz übergeben.

    In C++ versucht man oft, Abhängigkeiten klein zu halten und dadurch (unter anderem) Fehlerquellen zu vermeiden. Und eine globale Variable schafft meistens die schlimmste aller Abhängigkeiten.


Anmelden zum Antworten