Quellcode verstehen
-
Hi Leute,
ich arbeite mich grade durch den Quellcode eines Programms durch, und habe an einigen Stellen Probleme:
1.was machen die Zeilen:
#ifndef _Name_ #define _Name_2.was ist der Unterschied einer if-Abfrage mit # davor (also #if ... #endif) und der normalen Schreibart für Bedingungen?
danke schon mal!

Liebe Grüße
Laura
-
Die Zeilen sagen:
Lieber Präprozessor, wenn das Makro _Name_ noch nicht definiert ist dann definiere es bitte jetzt.
Später sollte dann noch ein
#endifkommen.Siehe z.B.:
https://secure.wikimedia.org/wikipedia/de/wiki/C-Pr%C3%A4prozessor.
-
danke

was ist aber der tiefere Sinn davon, if-Anweisungen im Präprocessor ausführen zu lassen, und nicht während des normalen ablaufs?
-
Prometheus87 schrieb:
was ist aber der tiefere Sinn davon, if-Anweisungen im Präprocessor ausführen zu lassen, und nicht während des normalen ablaufs?
In dem Fall handelt es sich um sog. Include Guards (=> selber googeln), die verhindern, dass der Code zwischen #ifndef...#endif mehrmals eingebunden wird. Typischerweise benutzt man das, damit man Headerfiles mehrfach (indirekt) inkludieren kann, ohne dass dabei der enthaltene Code tatsächlich mehrfach vom Compiler gelesen wird.
-
if != #if
Der Präprozessor kommt vor dem Compiler und bestimmt daher auch, was kompiliert werden soll und was nicht.
Wenn ich z.B. Debugcode nicht in meiner Release haben will. Oder wenn ich für verschiedene Plattformen schreibe.
#ifdef DEBUG // gib jede menge internes Zeugs aus #endif #ifdef WIN32 // mach Windows-spezifischen Kram #else // mach's nach Linux-Art #endifOder eben auch Include-Guards wie Bashar erwähnte...
-
ok, danke

dann hab ich noch ne Quellcodefrage (ist doch in Ordnung dass ich die hier noch reinschreib, und nicht en neues Thema aufmach, oder?)
man hat einen Konstruktor von folgender Form:
Konstruktor(int a, char** b):objektname1(variable1),objektname2(variable2) { ... }1. welche Bedeutung hat das doppelsternchen nach dem char (1 stern wäre ja pointer, aber 2?)
2. was macht der Quellcode hinter dem Doppelpukt? wird da einfach objektname1 der Wert Variable1 zugewiesen?
danke schon mal!
-
1. Man kann auch auf Zeiger zeigen.
2. Radio Eriwan:
- Ja, bei einfachen Typen
- Bei zusammengesetzten Typen (class, struct) wird eben der entsprechende Konstruktor aufgerufen
-
danke

insebsondere für die superschnellen Antworten!
-
Prometheus87 schrieb:
2. was macht der Quellcode hinter dem Doppelpukt? wird da einfach objektname1 der Wert Variable1 zugewiesen?
Das hinter dem Doppelpunkt nennt men Elementinitialisierungsliste, diese sollte immer zum initialisieren benutzt werden und nicht der Konstruktorrumpf. Nutzt du dazu den Konstruktorrumpf, dann ist es keine Initialisierung, sondern eine Zuweisung. Merk dir einfach, nutze immer die Elementinitialisierungsiste, so wie in deinem Codebeispiel.
Lg freeG