Seite 1 von 2
C:Präprozessor
Verfasst: Di Jul 22, 2008 7:08 pm
von Xin
neue url:
http://tutorial.proggen.org/doku.php?id=c:preprocessor
...bitte nach C:Preprozessor verschieben, danke.
Re: C:Präprozessor
Verfasst: Di Jul 22, 2008 9:22 pm
von Metamorph
Das verstehe ich nicht ganz. Ich habe dieses Kapitel nirgendwo genfunden.
Re: C:Präprozessor
Verfasst: Di Jul 22, 2008 10:05 pm
von Xin
Metamorph hat geschrieben:Das verstehe ich nicht ganz. Ich habe dieses Kapitel nirgendwo genfunden.
Da Du das Kapitel des Präprozessors angelegt hast, hast Du des Pudels Kern damit verstanden. ^^
Das Kapitel heißt "der praeprozessor".
Re: C:Präprozessor
Verfasst: Di Jul 22, 2008 10:18 pm
von Kerli
Bis jetzt ist es schon einmal ganz gut, was nur nicht ganz hineinpasst ist der Vergleich mit 'const' am Schluss, weil das soweit ich gesehen habe vorher noch nicht erwähnt worden ist.
Und du solltest den Code nach Möglichkeit in 'code'-Tags einbauen, dann wird er auch farblich hervorgehoben:
<code cpp>
c-code
</code>
Ich hab die Codestücke schon geändert, aber in Zukunft solltest du es selber verwenden...
Re: C:Präprozessor
Verfasst: Mi Jul 23, 2008 5:00 pm
von Metamorph
Danke für den Hinweis mit der Codeformatierung. Davon wusste ich noch gar nicht.^^
Das mit den Konstanten (const) stimmt. Ich finde, es sollte ziemlich am Anfang stehen. Man kann es noch anlegen. Ich finde, es ist wichtig, den Unterschiede zwischen const und #define zu wissen. Werde das noch genauer erläutern.
Re: C:Präprozessor
Verfasst: Do Sep 18, 2008 9:04 am
von fat-lobyte
Tut mir leid an den Autor, aber ich habe am Text ziemlich was zu bemängeln:
#define vs. const
Eine ähnliche Möglichkeit haben wir bereits durch das Schlüsselwort const kennengelernt. Worin liegt denn der Unterschied? Wird eine Konstante über const deklariert, reserviert der Compiler dafür Speicherplatz im Hauptspeicher. Eine durch #define deklarierte Konstante wird vor dem Kompiliervorgang vom Präprozessor ausgewertet.
Falsch.
Jeder ernstzunehmende Compiler wird Konstante POD (Plain Old Data, also int, double o.Ä.) Objekte nicht im Hauptspeicher sondern gleich im Code speichern. Konstante nicht- POD Objekte (also Arrays, Strings, Structs, Klassen) werden tatsächlich im Hauptspeicher gespeichert, und zwar im .bss Segment. Da gibt es aber keinen Unterschied zwischen const und #define
Er durchsucht den Quelltext nach ihrem Namen und ersetzt ihn durch ihren Wert. Nimmt man aus dem oberen Beispiel den Wert E und wird dieser beispielsweise zehnmal im Programm benötigt, so wird während der Laufzeit zehnmal der Wert 2.718281 kopiert. Wäre dieser Wert über const deklariert worden, gäbe es nur eine Kopie, wodurch man Rechenleistung sparen könnte. Heutige Computer haben eine wesentliche höhere Rechenleistung als die Modelle von damals, sodass dieses Problem eher unerheblich ist.
Siehe oben.
Re: C:Präprozessor
Verfasst: Fr Sep 19, 2008 3:09 pm
von Dirty Oerti
fat-lobyte hat geschrieben:Jeder ernstzunehmende Compiler wird Konstante POD (Plain Old Data, also int, double o.Ä.) Objekte nicht im Hauptspeicher sondern gleich im Code speichern. Konstante nicht- POD Objekte (also Arrays, Strings, Structs, Klassen) werden tatsächlich im Hauptspeicher gespeichert, und zwar im .bss Segment. Da gibt es aber keinen Unterschied zwischen const und #define
Kann ich bestätigen.
Zumindest nach dem, was mir mein Linker ausgegeben hat, wenn ich mal wieder an meinem Kernel gebastelt habe.
Re: C:Präprozessor
Verfasst: Mo Okt 06, 2008 1:55 am
von Metamorph
Ich habe jetzt diesen Block jetzt gelöscht. Da habe ich wohl etwas falsch verstanden. ^^
Danke für den Hinweis.
Re: C:Präprozessor
Verfasst: Mo Okt 06, 2008 10:41 am
von Xin
Xin hat geschrieben:...bitte nach C:Preprozessor verschieben, danke.
Verschoben.
Re: C:Präprozessor
Verfasst: Mo Okt 06, 2008 6:52 pm
von Metamorph
Xin hat geschrieben:Xin hat geschrieben:...bitte nach C:Preprozessor verschieben, danke.
Verschoben.
Ich verstehe es nach wie vor nicht. ^^
oO