Kurze Frage zum Befehl #define



  • Hallo wenn ich z.b. schreibe:

    #include <iostream>
    #define foo 123   // Wird foo jetzt zu einer int Variable?
    
    int main()
    {
    
    std::cout<< foo ; 
    
    return 0;
    }
    


  • Nein, der Preprocessor ersetzt grob gesagt (vor dem Kompilieren) jedes Vorkommnis von 'foo' durch 123. Der Compiler sieht dann nur die 123 als Konstante im Code.

    Google mal nach C++ Präprozessor für genauere Informationen.



  • #define foo 123 definiert foo als ein Makro für 123 . foo ist keine Variable, sondern ein Makro - jedesmal, wenn du im Code foo schreibst (und zwar nicht als Teil sondern als ganzen Namen), wird es vom Präprozessor zu 123, einem [s]const[/s] integer Literal. Früher hat man Makros benutzt um Konstanten zu erstellen (heute nimmt man const 😃 ).



  • Hacker schrieb:

    wird es vom Präprozessor zu 123, einem const int Literal.

    Ein Integer-Literal ist nicht const ! Es ist bloss eine Rvalue.



  • hustbaer schrieb:

    Hacker schrieb:

    wird es vom Präprozessor zu 123, einem const int Literal.

    Ein Integer-Literal ist nicht const ! Es ist bloss eine Rvalue.

    Edit:
    Hmm. Also laut dem Standard (2.13.2, Tabelle 5 siehe Klausel 2) ist eine Dezimaler Integer-Ausdruck (also einer, der mit einer anderen Ziffer als 0 anfängt) je nach Länge (schätz ich mal) int , long oder long long ... also genau wie du gesagt hast 😃


Anmelden zum Antworten