Zum Inhalt springen

Diskussion:C++-Programmierung/ Weitere Grundelemente/ Vorarbeiter des Compilers

Seiteninhalte werden in anderen Sprachen nicht unterstützt.
Abschnitt hinzufügen
Aus Wikibooks
Letzter Kommentar: vor 15 Jahren von RokerHRO in Abschnitt Anmerkungen

Anmerkungen

[Bearbeiten]
  • Der Präprozessor arbeitet nicht auf "Textebene" sondern auf "Tokenebene". So erkennt er z.B. Bezeichner, Zeichenkette, Literale und andere Token.
  • Was ist eine "Rohquelltextvorbearbeitungsstufe"?
  • Woher hat der Autor die Aussage, dass definierte Makros zu 1L oder 0L expandiert werden? Ich finde diese Aussage nirgends im Standard.
--RokerHRO 04:11, 23. Feb. 2008 (CET)Beantworten

Nachtrag: Der Name des Kapitels und die Einleitung sind falsch. Das, was man i.A. als "Präprozessor" bezeichnet ist ein integraler Bestandteil eines jeden C++-Compilers. Nämlich der, der die im Standard definierten Übersetzungsschritte 1 bis 10 übernimmt. Man sollte sich in diesem Wikibuch schon an den von der ISO definierten Sprachstandard halten, oder eben nicht C++ nennen, finde ich. --RokerHRO 21:12, 9. Okt. 2009 (CEST)Beantworten

#if vs. if

[Bearbeiten]

Was ist der Unterschied zwischen if und #if ? Was sind die Vor- und Nachteile ? --79.233.216.137 12:18, 26. Okt. 2008 (CET)Beantworten

#if ist eine Präprozessor-Direktive und wird zur Compile-Zeit ausgewertet, damit muss der Ausdruck dahinter eben ein vom Präprozessor auswertbarer Ausdruck sein. if wird dagegen zur Laufzeit ausgewertet. Falls die Bedingung eine Konstante ist, kann der Compiler ggf. die Sache wegoptimieren, also entweder den if- oder den else-Zweig. Er muss es aber nicht tun. --RokerHRO 12:37, 27. Okt. 2008 (CET)Beantworten

Abschnitt ##

[Bearbeiten]

Was bewirkt

  1. #define A "Hallo"
  2. define B "Welt"
  3. define A_UND_B A##B

? Ich kann diesen Code nicht ganz nachvollziehen. Irgendwie bekomme ich keine Ausgabe hin. Auf C-Präprozessor finde ich folgendes Beispiel, was ich für das modernere cout umgeschrieben habe.

  1. #define GLUE(X,Y) X ## Y // Verkettung von Makroparametern
  2. std::cout << GLUE(2, 34) << std::endl;

Aber was das soll, ist mir auch nicht ganz klar. Einfacher wäre es vielleicht gleich "234" zu schreiben. Ich habe meine Zweifel, dass man das Verknüpfen ganzer Programmteile hier schon verstehen kann. Oder habe ich vielleicht irgendein Kapitel übersehen? Ansonsten wäre ich für genauere Ausführungen dankbar.