C++

Inline-Funktionen

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Sie erhalten Informationen über das Schlüsselwort "inline". Seien Sie gespannt auf die Ausführungen des Trainers, der Ihnen verrät, wie der Compiler darauf eingeht.

Transkript

Ich möchte ihnen jetzt noch einen ganz nützlichen Befehl zeigen, den Inline Befehl, und bei der Gelegenheit gleich nochmal ein bisschen was zum Ansehen von Quellcode und übersetzten Code, und so weiter, zeigen. Also, ich habe hier was ganz einfaches. Ich mache hier zweimal Ausgabe und hier oben definiere ich eine Funktion. Ausgabe, die einfach was ausgibt auf dem Schirm. Das können wir ruhig mal übersetzen, da passiert nicht weiter Aufregendes. Das ist ja auch ganz harmlos. Das andere, was ich jetzt Ihnen zeigen will ist eigentlich ganz interessant, aber schwer zu zeigen. Wenn ich jetzt hier davorschreibe 'inline', bedeutet das, ich gebe dem Compiler einen Hinweis, dass die Ausgabe hier nicht durch einen Unterprogrammaufruf gemacht werden soll, sondern durch Einbau des Programmcodes an dieser Stelle. Nun kann man das Programm starten und sieht keinen Unterschied, und das ist auch so, nach den Regeln bei C++ ist es nicht unbedingt nötig, dass der Compiler sich an dieser Vorschrift hält. Na, wie kann man so was überprüfen im Fall eines Falles, wenn man mal wissen will, was dabei wirklich rauskommt. Das geht wie folgt. Da geht man hier mal unter Eigenschaften, rechts klicken auf 'rdk_inline' und hier, das habe ich schon vorbereitet, kann man anklicken, normalerweise steht hier keine Auflistung, ich möchte gern den Assembler Code haben, mit Quellcode. Das machen wir jetzt mal. Wir erstellen das Programm, 'rdk_inline' erstellen. Ich starte es jetzt gar nicht, ich erstelle nur. Und dadurch wird diese Assembler Quelle erstellt. und ich kann jetzt zum Beispiel hier sagen Hinzufügen vorhandenes Element... Und unter Debug findet man jetzt hier zum Beispiel Assembler, Es gibt auch noch die .cod, wenn man sich den Code noch mit ausgeben will. Das habe ich vorher mal ausprobiert, aber wir machen jetzt mal diese Assembler Datei. So und hier kann ich jetzt aufrufen, Doppelklick, dann sehe ich das Listing. Das sieht jetzt ganz furchtbar aus, nämlich die ganzen Deklarationen für den Assembler. Das ist was der Compiler aus unserem schönen kleinen, kompakten Code gemacht hat. Und das ist richtig schwierig zu lesen, aber man sieht hier schon was. Hier hab ich den Aufruf von Ausgabe, steht nämlich hier jedesmal die Programmcodezeile daneben, und hier unten wird ein Call -das ist ein Maschinencode-Call- durchgeführt. Hier vorne werden noch Parameterverwaltungen gemacht. Verwaltungsarbeit kann man sagen und das 'return (0)', was hier unten bei uns im Code steht, das ist ein XOR oder EAX. EAX ist das Register vom 80x86 Prozessor, oder was auch immer. Pentium und so weiter. Das ist immer das gleiche Register. Das Rückgabewertregister wird auf 0 gesetzt. Und dann, Stack bereinigt, return ist dann das eigentliche Return vom Hauptprogramm. Und hier steckt jetzt das Unterprogramm Ausgabe. So kompliziert sieht es aus, aber man sieht tatsächlich hier meine Zeile. Und da werden jetzt hier jede Menge Daten auf den Stack getan und das alles maschinenintern notwendig ist, um das auzugeben. Aber Sie sehen schon, der Compiler denkt gar nicht dran, hier tatsächlich einen Inline-Code zu erzeugen. Wie gesagt, das ist eigentlich seine Sache. Nun ist es so, dass es im Debugmodus eigentlich sowieso nicht passiert, sondern erst im Release-Modus. Und ich mach das jetzt mal hier auch, da muss ich hier nochmal schauen, ob ich es eingestellt habe. Da habe ich das auch mit Quellcode, das ist in Ordnung. Und jetzt übersetzt man das Ganze mal im Release Mode. Beim Release Mode optimiert der Compiler mehr und lässt die ganzen Hilfsmittel für das Debuggen weg. Der Code wird also kompakter und das ist auch das, was man später mal in seiner fertigen Applikation weitergeben sollte, und sogar weitergeben muss, in die Bibliotheken im Debug-Mode, die davon eigentlich gar nichts weiter geben. So, jetzt HINZUFÜGEN, nochmal ein vorhandenes Element. Und da gehe ich hier nach Release. Das geht jetzt für das Visual C, bei Linux, und so weiter. Ist egal, was man weitergibt, da hat man ja die entsprechenden Bibliotheken. Natürlich, die mitgeliefert werden, da muss man aber auch drauf achten, ob man das weitergeben kann, hängt davon ab, welche Lizenz man für das jeweilige System hat. So, hier 'inline' Beispiel. Das ist jetzt im Release-Modus. Ein anderer Assembler Code. Da gibt es eventuell auch eine Fehlermeldung, wenn sie das hier aufrufen, dass da keine Regeln sind. Kann man ignorieren. Und ich kann das jetzt hier aufrufen und ist natürlich jetzt hier schwer zu sehen, welches von den beiden... das ist der Richtige. Mal gucken, was er jetzt gemacht hat. Jetzt müssen wir uns hier natürlich ein bisschen durchbeißen, aber da sehe ich schon was. Hier steht jetzt 'cout'-Ausgabe, und da kommt jede Menge Zeug, mal schauen, ob wie hier nochmal eine 'cout'-Ausgabe finden. Das ist ja alles internes Zeug. Da sieht man schon, wie schwierig das ist sich in diesem Assembly-Code... Früher musste man das überhaupt nur so programmieren. Da durch zu beißen... Ich kann ja hier mal folgendes machen. Da gibt es natürlich eine find-Anweisung, die ist ganz hilfreich, "Ausgabe" einfach mal suchen. Das ist hier definiert, OK. Schauen wir mal. Da kommt noch jede Menge vor. Da haben wir wieder was für die Ausgabe. Ich suche jetzt hauptsächlich nach diesem Text. Hier ist die erste Ausgabe wohl! Na ja, da muss man mal gucken, da wird was ausgegeben. Ist aber kein Call. Hier ist unsere Kommentarzeile 8, das ist schon mal sehr gut. Und jetzt gehen wir... Hier kommt jetzt wieder der nächste Aufruf, und hier ist Zeile 14. Das heißt er hat hier wirklich in der Release-Version den Code tatsächlich 'inline' generiert. Der unterscheidet sich also hier deutlich von der Version. Die ist kleiner und kompakter, weil da wird einfach zweimal mit einem Call die entsprechende Ausgabe-Routine aufgerufen. Und hier haben wir einmal die Ausgabe. Da ist das hier drin. Und hier unten ist dann praktisch der Code für den gesamten Rest. Da habe ich jetzt nicht aufgepasst, da müssen wir bisschen gucken, dass wir hier den richtigen Code... bin durcheinandergekommen. Hier sieht man das, hier ist Ausgabe. Und hier ist Ausgabe. Hier wird zweimal aufgerufen. Also in dem Code mit Debug übersetzt, und in dem Code mit Release, das ist hier, - muss aufpassen, die Tabulatoren ändern sich hier ständig. Da habe ich tatsächlich alles in einem riesen Monsterprogramm drin. Alles reinkopiert, alles 'inline', ganz brav am Schluss. Dann setze ich gerade noch mal eine Return-Anweisung hier. Unten ist irgendwo unser Programmende. Also eine interessante Geschichte, das 'inline' muss man sich nur merken, hat was mit Programmoptimierung zu tun. Von Fall zu Fall kann man so was verwenden, es tut auch nicht wirklich weh, aber das Programm kann sehr sehr groß werden, wenn man da nicht darauf achtet.

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!