C++

Bedingte Kompilierung

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Dieses Video zeigt, wie Sie dem Präprozessor z.B. anzeigen, dass Sie, in Abhängigkeit von selbst definierten Schaltern, bestimmte Zweige Ihres Programms gar nicht erst kompilieren lassen wollen.

Transkript

Nun haben wir schon gesehen wie man mit include was einfügt für dem Preprozessen ist es hier auch mit define das definiert. Interessant ist jetzt eine Anfrage. Und dafür gibt es auch mehrere Befähle, zum Beispiele mit if kann man vergleiche anstellen,# if A=1, dann mache ich irgendwas, #else und #endif, jetzt muss ich aber das A noch definieren, das macht man hier mit dem #define A ist 1, so. Jetzt kann ich hier irgendwas damit tun, damit wir hier auch was sehen, schreibe ich das mal hier ein. Das ist mir jetzt ganz egal, Sie können das über Grenzen von C hinaus, sogar über die Kopfe hier von Deklaration hinaus schreiben. Völlig Wurst wo diese Präpozessor Anweisungen entstehen, insgesamt muss ich natürlich eine valide Syntax ergeben. A=1 schreibe ich hier mal hin, endl und damit wir das auch sehen, was endl denn eigentlich mancht, schreiben wir hier unten A=2 hin. Sie sehen schon das wird hier grau, weil er hier in disem Pfad nichr reinläuft also die Compilier zeigen einem unter Umständen auch ein bisschen wie von diesen Syntax hier das Ganze funktioniert und jetzt schauen wir mal ob das überhaupt so richtig ist, es kann nämlich im Moment auch sein, na ja hat es hier schon richtig angezeigt, der Teil ist hier grau wird also später gar nicht übersetzt, das ist eine Hilfe von Visual C++. Ich starte das Ganze mal, jetzt kommt A=1 raus, oben sieht man das ja. So, und jetzt machen wir weiter. Ich definiere das A jetzt als 2 und hier die 2, ich safe das mal ab, unten passiert noch nicht viel. Das dauert immer ein bisschen, bis er das merkt. ich kann das jetzt aber mal übersetzen, dann komm jetzt hier immer noch A=1 raus, weil das noch nicht so stimmt, wie wir das hier geschrieben haben. Das fragt sich jetzt natürlich warum? weil A ist ein mit gleich 1, aber Ö ist eine Falle, darauf soll man eigentlich nicht mehr reinfallen. Ich mache das jetzt mal richtig. Sie sehen schon, jetzt hab ich A=2 und wenn ich jetzt hier jetzt A definiere, nichtm das hat er uns vorher angezeigt? Dieses grau heißt nämlich nicht dass er da nicht reinläuft, so er läuft nie da rein. Dass war eigentlich das, was uns der Compilier damit zeigen sollte, also wenn Sie das mal in Ihrem Program sehen, jetzt funktioniert das Ganze ordnungsgemäß. Klein wenig Verwirung aber ich wollte hier jetzt hier grad mal auch zeigen und schau, ob Sie da auch aufpassende so zu sagen, nun jetzt ist mir aus versehen passiert. Sehr gut. So wir haben noch was anderes. Was man mit der Präprozessor auch abfragen kann ist nämlich ob überhaupt irgenwas definiertes mit # ifdef. # ifdef XXXX schreibe ich mal hier hin, #endif , dann gebe irgendwas aus, zum Beispiel ein Test, das ist immer ganz hilfreich, damit kann man sich Sachen im cout reinschreiben, die man später mal nicht mehr braucht und zentral abschalten möchte mit dem ifdef ist es hier elegent, und ich machte das jetzt mal hier, da dürfte eigentlich jetzt das Test überhaupt nicht auftauchen. Und wenn ich jetzt hier #define XXXX. egal was ich dahinten hinschreibe, völlig Wurst, es muss noch definiert sein, dann kann ich das hier auch einfach starten. Das elegante ist, man muss es gat nicht hier oben definieren, man kann es auch hier im Prinzip unter Eigenschaften definieren und da gehen wir mal rein und schauen, ob wir das auch entsprechend finden. Hier oben bin ich im Debug Fenster, unter debugging kann ich hier Befehlsargumente, das ist hier ganz gut, aber wir wollen eineigentlich hie für den Präprozessor was definieren und da kann ich oben in der Tat, schreibe ich mal hin XXXX, die X definieren und ich nehme das jetzt hier raus und jetzt machen wir mal hier starten ohneDebug schauen wir ob das überhaupt funktioniert. Wenn ich jetzt hier nochmal reingehe und ich gehe jetzt raus, Präprozessedefinition, das ist nur zu den Zweck das ist überhaupt definiert ist. Ich tue das wieder raus und starte das Ganze wieder und das ist wieder weg, das ist ganz praktisch, weil hier haben Sie ja verschiedene Möglichkeiten, debug,release oder eigene Konfiguration. Ich könnte jetzt hier eine neue Konfiguration mir erstellen und in dieser Konfiguration definiere ich mich zum Beispiel XXXX. Dann kann ich auf die Art und Weise ganz schnell hier oben durch Umschalten eine Version mit XXXX übersetzen und eine Version ohne XXXX. Auf die Art und Weise kann man Fallunterscheidung im Compilier sehr gut durchführen, es wird unterschiedliche Cout erzeugt, was sehr hilfreich ist, wenn zum Beispiel eine Demo Version rausgeben will die auch Hackersicher ist sozusagen da taucht auch der Cout gar nicht erst auf. Hier sehen Sie schon der hat es jetzt hier wieder ausgegraut, also er zeigt einem schon manchmal an, dauert ein bisschen. welcher Pfad denn tatsächlich ausgeführt wird, das ist ein bisschen tricky. Auch das hängt natürlich wieder hier an der VisualC++ Express Edition da geht das, bei anderen Compiliern unter Linux sieht das unter Umständen eben entsprechend anders aus, das ist immer ganz verschieden. Es gibt mehere solche Anweisungen, es gibt noch eine Error ANweisung kann man auch noch was machen, es gibt es noch ein ifndef, das ist auch nochmal eine interesante Geschichte, die ich hier noch zeigen möchte, jetzt mache ich hier mal einen neuen Header. Header, ich nenne den Header einfach header ist jetzt egal und da schreibe ich jetzt mal hier, und zwar brauche ich ein#ifndef MYHEADER ist egal wie man das nennet, dann definiere ich MY HEADER dann kann ich einfach so ohne irgedwelchen Parameter, ist dann schon definiert und hier kann ich jetzt zum Beispiel mal was gemeines machen damit wir den Effekt auch deutlicher sehen, ich definiere jetzt hier eine Variable, deklinierete die Variable und inizialisiere sie zu Null und hier im Hauptprogram, gehen wir mal dahin, da include ich diese include header.h so und dann passiert jetzt erstmal sowieso nicht, sollte eigentlich jedenfalls nichts passieren, da kommen jetzt nur unsere Ausgaben von vorher, jetzt da ja, hier passiert aber auch nichts, wenn ich das zweimal hier angebe, starte ich mal, das übersetz er genau wunderbar durch und wenn ich jetzt hier mal reingehe und ich ändere das mal jetzt einfach ab ich definiere hier einfach ein falsches Wort, so, machen wir das mal so, speichere das ab und gehen hier wieder zurück und starten ohne debug jetzt kriege ich ein Fehler, weil jetzt nehme ich int i neu Definition mehrfach, nicht durch das einführen hier in dem Hauptprogram include include definiere ich beim zweiten Mal das i doppelt, das darf ich nicht, aber durch dieses ifndef, wenn ich das drin lasse, mit diesen Mechanismus kann uch verhindern, dass ein Header versehentlich zweimal aufgerufen wird, inerhalb von einem Hauptprogram. Wenn ich jetzt das Ganze in einem anderen Unterprogrammodul noch einmal aufrufe, dann würdedas mit dem int A=0 oder immer man da drin stehen hat, auch nochmal schieflaufen, aber für andere Deklaration funktioniert es und deshalb ist immer eine ganz praktische Angelegenheit im Header. So eine Struktur wird man sehr häufig in verschiedensten Programen finden.

C++

Machen Sie sich mit den einfachen Grundlagen zu C++ vertraut und lernen Sie anhand zahlreicher Übungs- und Codebeispiele die Klassenkonzepte, Prozeduren und Funktionen kennen.

9 Std. 3 min (143 Videos)
Derzeit sind keine Feedbacks vorhanden...

Video-Training auf DVD mit Bonusmagazin

+ Tutorial to go: Mit Videos für iPod, iPhone & Co.

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!