Konstante Variable oder Makro, was ist sinnvoller?



  • Beide Varianten erfüllen den gleichen Zweck:

    #define PI 3.1415926535898
    
    /* oder */
    
    const double pi = 3.1415926535898
    

    Aber welche davon sollte man bevorzugen und welche macht in welchem Fall genau mehr Sinn?

    Was macht der Compiler z.B. mit dem Makro PI wenn man es in einer Berechnung mit einer Variable verwendet, deren Inhalt zur Compilezeit noch nicht feststand bzw. sich im laufe der Zeit verändern soll?

    Bsp:

    #define PI 3.1415926535898
    int input = 0;
    double ergebnis = 0;
    
    cin << input;
    
    ergebnis = PI * (double) input;
    

    Speichert er das PI Makro als eine Konstante ab?
    Also kommt im endeffekt nicht das gleiche raus, wie
    const double pi?



  • Korrektur:

    Bitte
    cin << input;
    durch
    cin >> input;

    vertauschen.



  • #define führt einfache Textersetzungen durch, was deine letzte Frage beantworten sollte.
    Deine erste im Grunde auch, denn die Ersetzung wird überall durchgeführt. Auch da, wo nicht die PI-Konstante gemeint ist, sondern du z.B. eine lokale Variable PI deklarierst. int 3.141516...=... kompiliert natürlich nicht und dann darfst du rätseln, was die Fehlermeldung bedeuten soll und was in aller Welt mit deinem Code nicht stimmt.

    #define sollte demnach für Konstanten strikt vermieden werden.



  • nennt mich Kleingeist... Aber es gibt keine konstanen Variablen. Es gibt Konstanten ODER Variablen.

    const int Konstantin = 5; <-- Konstante

    int ÄnderMich = 2; <-- Variable

    Da der Inhalt von Konstantin ja schon zu Compilezeit feststeht (is ja eine Konstante, keine Variable) kann der Compiler diesen Wert auch direkt verwenden.

    Der Unterschied zum define: Da die Konstante einen Type hat, kann der Compiler zusätzliche Typechecks machen die beim define nicht gehen.



  • loks schrieb:

    nennt mich Kleingeist... Aber es gibt keine konstanen Variablen. Es gibt Konstanten ODER Variablen.

    const int Konstantin = 5; <-- Konstante

    int ÄnderMich = 2; <-- Variable

    Da der Inhalt von Konstantin ja schon zu Compilezeit feststeht (is ja eine Konstante, keine Variable) kann der Compiler diesen Wert auch direkt verwenden.

    Der Unterschied zum define: Da die Konstante einen Type hat, kann der Compiler zusätzliche Typechecks machen die beim define nicht gehen.

    int i;
    cin>>i;
    const int konstanteVariable=i;
    

    Kleingeist. 🤡



  • volkard schrieb:

    Kleingeist. 🤡

    Kleinstgeist! 😃



  • Dieser Thread wurde von Moderator/in rüdiger aus dem Forum Rund um die Programmierung in das Forum C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • loks schrieb:

    nennt mich Kleingeist... Aber es gibt keine konstanen Variablen. Es gibt Konstanten ODER Variablen.

    Der Begriff "Variable" wird in der Programmierung allgemein für Datenbehälter und unabhängig von der Veränderbarkeit verwendet. Daher finde ich "konstante Variable" nicht falsch, auch wenn es sich auf den ersten Blick zu widersprechen scheint.

    Man sollte lieber aufhören, "konstante Referenz" zu sagen! 😉



  • Man sollte lieber aufhören, "konstante Referenz" zu sagen! 😉

    Wie sollt man das dann nennen ?
    "Referenz auf Konstante Variable"?
    oder noch besser
    "Verweis auf nur-Lese-deklarierierten Speicherbereich vom Typ ..."
    meine arme Zunge 😃
    manchmal sind inhaltlich falsche Begriffe doch ned so schlecht, hauptsache sie nur kurz genug ^^

    Ciao ...



  • RHBaum schrieb:

    manchmal sind inhaltlich falsche Begriffe doch ned so schlecht, hauptsache sie nur kurz genug ^^

    Deshalb verwende ich auch "Const-Referenz", das ist noch kürzer. 🕶


Log in to reply