1. Vom Sourcecode zum Programm



Ähnliche Dokumente
Programmierung mit C Modularisierung von Programmen. Präprozessor-Anweisungen nutzen.

C++ - Einführung in die Programmiersprache Header-Dateien und Funktionen. Leibniz Universität IT Services Anja Aue

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 29

Programmentwicklung mit C++ (unter Unix/Linux)

Pseudo-Programmiersprache

Compiler Präprozessor Header Files

DAP2-Programmierpraktikum Einführung in C++ (Teil 1)

Unterlagen. CPP-Uebungen-08/

Einführung in die C-Programmierung

Hello World! Eine Einführung in das Programmieren Das erste Programm

Compiler Präprozessor Header Files

Mapra: C++ Teil 3. Felix Gruber. 29. April IGPM, RWTH Aachen. Felix Gruber (IGPM, RWTH Aachen) Mapra: C++ Teil 3 29.

FACHHOCHSCHULE MANNHEIM

Kurzeinführung in C/C++ Informationsquellen: - Webseite zur Vorlesung, Abschnitt Informationen zu C und C++ Einleitung

Übersicht. C Modularisierung. Präprozessor, Compiler, Linker. Präprozessor, Compiler, Linker. Präprozessor, Compiler und und Linker Linker

Grundlagen der Informatik Vorlesungsskript

Vorlesung Informatik I

Lehrstuhl für Datenverarbeitung. Technische Universität München. Grundkurs C++ Buildsysteme

Klausur: Grundlagen der Informatik I, am 05. Februar 2008 Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.: Punkte:

8.1 Vom Quellcode zur ausführbaren Programm

Vorlesung Informatik I

Einführung in die C++ Programmierung für Ingenieure

Praktikumstermin B-07: make & Makefiles

Der Goopax Compiler GPU-Programmierung in C++ ZKI AK-Supercomputing, Münster, , Ingo Josopait

Propädeutikum. Dipl.-Inf. Frank Güttler

Übungsblatt 1. Java Vorkurs (WS 2017)

Einführung in C ++ und die Objektorientierte Programierung

U1 3. Übung U1 3. Übung. Die Kommandos auf den folgenden Folien dienen der Veranschaulichung. Sind nicht direkt auf die Übungsaufgabe übertragbar

SimpleStat mit Methoden

Modulare Programmierung und Bibliotheken

Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 1

Programmieren in C. Macros, Funktionen und modulare Programmstruktur. Prof. Dr. Nikolaus Wulff

Grundkurs C++ Buildsysteme Versionsverwaltung mit git

Programmieren in C++ Templates

Grundkurs C++ Buildsysteme Versionsverwaltung mit git

Grundstruktur eines C-Programms

Quiz und Übungen. C++ Übung am 19. Mai 2016

Grundlagen von C# - 1

Grundkurs C++ Buildsysteme Versionsverwaltung mit git

Institut für Programmierung und Reaktive Systeme. Java 1. Markus Reschke

Programmieren in C. Eine Einführung in die Programmiersprache C. Prof. Dr. Nikolaus Wulff

Zum Abschluss wird gezeigt, wie aus einem C++ Quell-Programm ein ausführbares Programm erzeugt wird. 1. Installation von NetBeans...

Javaprogrammierung mit NetBeans. Variablen, Datentypen, Methoden

7.2 Dynamischer Speicher in Objekten/Kopierkonstruktor

Objektorientierung: Klassen und Objekte

Vorkurs Informatik WiSe 16/17

C-Propädeutikum Funktionen

C++ Kurs Teil 1. Architektur, Anwendungsspektrum, primitive Datentypen, Funktionsaufrufe, Referenzen, Klassen

Crashkurs C++ Wiederholung

7. Einführung in C++ Programmieren / Algorithmen und Datenstrukturen 1 Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt

Von Java nach C++ Dr. Frank Weichert Lehrstuhl Informatik VII Technische Universität Dortmund

Algorithmen zur Datenanalyse in C++

Von Java nach C++ Frank Weichert, Heinrich Müller Informatik VII Universität Dortmund

Martin Unold INFORMATIK. Geoinformatik und Vermessung

U4 Grundlagen der C-Programmierung

Die Programmiersprache C

Einführung in die Programmierung 1

Dr. Monika Meiler. Inhalt

Grundlagen der Programmentwicklung

Funktionales C++ zum Ersten

Praktische Informatik 1

Vorkurs Informatik WiSe 17/18

Propädeutikum. Dipl.-Inf. Frank Güttler

C++ - Variablen: Gültigkeit - Sichtbarkeit

Inhalt. 1 Einstieg in die Welt von C Erste Schritte in C 31. Vorwort... 15

Objektorientierung Grundlagen

Programmierung mit C Zeiger

Thema heute: Vererbung und Klassenhierarchien. Abgeleitete Klassen. Vererbung von Daten und Funktionen. Virtuelle Funktionen

Hello World. Javakurs 2014, 1. Vorlesung. Sebastian Schuck. basierend auf der Vorlage von Arne Kappen. wiki.freitagsrunde.org. 3.

Compiler und Präprozessor (1) Erstellen eines Projektes

Informatik I (D-ITET)

C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren

Informatik I (D-MAVT)

Hochschule Darmstadt Informatik-Praktikum (INF 1) WS 2015/2016 Wirtschaftsingenieur Bachelor 5. Aufgabe Datenstruktur, Dateieingabe und -ausgabe

Programmiersprachen Einführung in C

Einführung in den Einsatz von Objekt-Orientierung mit C++ I

Ein kleiner Blick auf die generische Programmierung

Transkript:

1. Vom Sourcecode zum Programm 1.1 Programmablauf source1.cpp source2.cpp header.h makefile Compiler Präprozessor Übersetzer Assembler object.obj object.obj Linker library.dll programm.exe Abbildung: Erstellung eines ausführbaren Programms Seite 1 von 7

Werkzeug Editor Compiler Linker zum Schreiben von Text. ist in einer Entwicklungsumgebung enthalten Präprozessor stellt den vollständigen Quellcode auf Textebene zusammen. verarbeitet Anweisungen, die mit einem # beginnen. sucht und ersetzt Text. Übersetzer (Compiler) erzeugt Assemblercode, der von Menschen gelesen werden kann. Assembler erzeugt aus den Assemblercode Objektcode (Maschinencode). Der Code besteht aus 0 und 1. Maschinencode kann mit einem Hex-Editor gelesen werden. verbindet alle Objektdateien und Bibliotheken zu einer ausführbaren Datei. Werkzeug Editor erstellt Quelldatei (.cpp) Source. Ein Programm, welches mit einer bestimmten Sprache (hier C++) geschrieben ist. Header-Datei (.h) Enthält Deklarationen von Funktionen und Variablen, die in verschiedenen Quelldateien genutzt werden. Compiler: Präprozessor Seite 2 von 7

Werkzeug Übersetzer erstellt Assembler Linker Objektdatei (.obj) Ausführbares Programm (.exe) besteht aus Maschinencode. ist abhängig von der genutzten Programmiersprache, Compiler und dem Rechner, auf dem das Programm übersetzt wurde. 1.2 makefile Der Befehl make und die Datei makefile stammen aus der Unix-Welt und werden in der Software-Entwicklung eingesetzt. Die Datei makefile beschreibt mit einer Skript-ähnlichen Sprache Abhängigkeiten zwischen den einzelnen Dateien eines Projekts. Dateien eines Projekts werden mit Hilfe eines makefiles überwacht. Mit Hilfe des Befehls make wird die Datei makefile ausgeführt. Ein einfaches makefile kann folgendermaßen aussehen: mymain.o : mymain.cpp g++ -c mymain.cpp Der Befehl make weiß aufgrund dieser Zeilen, dass er nach einer Datei mit dem Namen mymain.cpp schauen muss. Aus dieser Datei wird mit Hilfe des Kommandos g++ -c mymain.cpp die Datei mymain.o generiert. Das makefile enthält eine Regel, die eine Aussage über die Erstellung einer Objektdatei aus einer Quelldatei trifft. Seite 3 von 7

Eine Regel in einem makefile hat folgendes Aussehen: Ziel : Abhängigkeit Kommando Ziel ist ein Synonym für die Datei, die erstellt werden soll. In derselben Zeile stehen, durch einen Doppelpunkt getrennt, die Abhängigkeiten. Die Abhängigkeiten bezeichnen alle Dateien, die benötigt werden, um das Ziel zu generieren. Das Kommando beschreibt eine Aktion, die die Abhängigkeiten verarbeitet und das Ziel erstellt. Das Kommando wird mit Hilfe des Tabulators und nicht mit Leerzeichen eingerückt! Die Erstellung eines Ziels kann mehr als eine Abhängigkeit haben. Die einzelnen Dateien, die benötigt werden, sind durch Leerzeichen getrennt. myprogramm : mymain.o myausgabe.o g++ mymain.o myausgabe.0 o myprogramm myprogramm ist von den Objektdateien mymain und myausgabe abhängig. Abhängigkeiten können in einem makefile auch mehrstufig sein. myprogramm : mymain.o myausgabe.o g++ mymain.o myausgabe.0 o myprogramm myausgabe.o : myausgabe.c g++ -c myausgabe.c mymain.o : mymain.c g++ -c mymain.c Wenn der Befehl make myprogramm aufgerufen wird, werden zuerst die Objektdateien aus den Quelldateien generiert. Anschließend wird aus den Objektdateien myprogramm erzeugt. Wenn das Ziel ein jüngeres Datum hat als ihre Abhängigkeiten, wird make nicht gestartet. Beispiel: Das Ziel myprogramm wurde letztmalig am 4.10.2005 generiert. Der Programmier verändert die Datei mymain.cpp am 1.11.2005 und speichert diese ab. Nach der Änderung der Quelldatei wird make gestartet und ausgeführt, da das Ziel älter ist als die Abhängigkeit. Mit Hilfe des Befehls make können auch Dateien gelöscht werden. clean: rm *.obj core rm ist ein Befehl zum Löschen von Dateien. Hier werden alle Objektdateien und Dateien, die bei einem Programmabsturz erzeugt werden, gelöscht. Das Ziel clean wird auch als Pseudo-Ziel bezeichnet. Es besitzt keine Abhängigkeiten und wird nie erzeugt. Um ein Projekt vollständig zu kompilieren, kann folgende Regel genutzt werden. all : mymain.o g++ -o mymain.exe mymain.o Seite 4 von 7

Kommentare beginnen in einem makefile mit einem Hash. # Compilieren des Programms Hello World all : mymain.o g++ -o mymain.exe mymain.o mymain.o : mymain.cpp g++ -c mymain.cpp Weitere Informationen können Sie unter http://wsd.iitb.fhg.de/~hiwigeg1/selflinux/pdf/make.pdf finden. 1.3 Header-Dateien Header-Dateien sind Sammlungen von Variablen, Datenstrukturen und Deklarationen von Funktionen zu einem bestimmten Thema. Zum Beispiel die Header-Datei <iostream> enthält Deklarationen von Funktionen und globale Variablen für die Ein- und Ausgabe. Header-Dateien in C++ haben immer die Dateiendung.h. Folgende Beispiele sind gültige Namen für Header-Dateien: kreis.h berechnung_flaeche. myprogramm.revision_1.h Header-Dateien enthalten alle Definitionen von Variablen, Konstanten, Datentypen und strukturen, Deklarationen von Funktionen und Klassen und alle Programmteile, die der Präprozessor wie Text ersetzen kann. Die Definition und Deklarationen in einer Header-Datei werden von vielen verschiedenen Quelldateien benötigt. HeaderDateien enthalten keinen Code, der kompiliert werden muss. keine Variablen, Konstanten, Datentypen und strukturen, die nicht global genutzt werden. Seite 5 von 7

Header-Dateien haben einen bestimmten Aufbau: Header-Datei myheader.h #ifndef myheader #define myheader // Kommentar: Dateiname und Aufgabe // Erstellungsdatum // Version // Revision // Compilerschalter #define WINDOWS #undef MSDOS // Include-Dateien #include <iostream> #include "myausgabe.h" // Symbolische Konstanten #define TRUE 1 // Makros #define MIN(zahlA, zahlb) ((a) < (b)? (a) : (b)) // Globale Konstanten const double max = 100; // Datenstrukturen und Typvereinbarungen typedef float Flaeche; // Globale Variablen extern int mass; // Deklarationen von Funktion double flaeche (float breite, float hoehe); Mit Hilfe des Codes #ifndef myheader #define myheader wird überprüft, ob der Präprozessor die Header-Datei schon eingebunden hat oder nicht. Wenn die Header-Datei das erste Mal aufgerufen wird, wird die Konstante myheader definiert und alle nachfolgenden Zeilen ausgeführt. Wenn die Header-Datei nochmals aufgerufen wird, wird die Einbindung durch die Anweisung ifndef (falls nicht definiert) verhindert. Seite 6 von 7

Beispiel für Klassenmodule: rect.h // Vermeidung von // rekursiven Aufrufen #ifndef RECHTECK_H #define RECHTECK_H // Ein Byte ist immer ein Char typedef unsigned char BYTE; // RGB-Farben als Struktur struct Color{ BYTE red; BYTE green; BYTE blue; // Definition der Klasse Rechteck class Rect{ private: short xpos, ypos; short breite, hoehe; Color rectfarbe; public: void Init(short x, short y, short width, short height); void Move(short x, short y); void Resize(short width, short heigth); void SetColor(BYTE r, BYTE g, BYTE b); void DrawRect(); rect.cpp using namespace std; #include <iostream> // Klassendefinition einbinden #include "rect.h" void Rect::Init(short x, short y, short width, short height){ xpos = x; ypos = y; hoehe = height; breite = width; rectfarbe.red = 0x00; rectfarbe.green = 0x00; rectfarbe.blue = 0x00; void Rect::Move(short x, short y){ xpos = x; ypos = y; void Rect::Resize(short width, short heigth){ void Rect::SetColor(BYTE r, BYTE g, BYTE b){ void Rect::DrawRect(){ Globale Variablen in Header-Dateien verletzen das Prinzip information hiding und sollten vermieden werden. Falls globale Variablen nötig sein sollten, ist in der Header- Datei nur ein Verweis auf die Variable vorhanden. Die globale Variable wird aber in der dazu gehörigen Quelldatei definiert. globaldaten.h // Vermeidung von // rekursiven Aufrufen #ifndef GLOBALDATEN_H #define GLOBALDATEN_H extern int nummer[50]; extern int feldzeiger: globaldaten.cpp int nummer[50] = {0 int feldzeiger = 0; Seite 7 von 7