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 123definiertfooals ein Makro für123.fooist 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 manconst
).
-
Hacker schrieb:
wird es vom Präprozessor zu 123, einem
const intLiteral.Ein Integer-Literal ist nicht
const! Es ist bloss eine Rvalue.
-
hustbaer schrieb:
Hacker schrieb:
wird es vom Präprozessor zu 123, einem
const intLiteral.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,longoderlong long... also genau wie du gesagt hast