Programm in Source-Files aufteilen Erhöht Lesbarkeit Aufteilung orientier t sich an logischer Struktur des Programms Getrenntes Übersetzen möglich:



Ähnliche Dokumente
Praxisorientierte Einführung in C++ Lektion: "Die Compiler-Chain (Vom Quellcode zum ausführbaren Programm)"

Programmentwicklung mit C++ (unter Unix/Linux)

DLLs (dynamic loaded libraries) mit MingW erstellen

Einführung in die C-Programmierung

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

Unterprogramme. Funktionen. Bedeutung von Funktionen in C++ Definition einer Funktion. Definition einer Prozedur

Grundlagen der Informatik - 6. Praktikum

Zählen von Objekten einer bestimmten Klasse

Pass by Value Pass by Reference Defaults, Overloading, variable Parameteranzahl

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

Deklarationen in C. Prof. Dr. Margarita Esponda

Übungen zu C++ Kapitel 1

Native Zeichenketten (C-Strings)

Nuetzlicher Kleinkram

Wichtig ist die Originalsatzung. Nur was in der Originalsatzung steht, gilt. Denn nur die Originalsatzung wurde vom Gericht geprüft.

Fakultät Angewandte Informatik Lehrprofessur für Informatik

Revision Control System. Versionskontrolle

Prinzipien Objektorientierter Programmierung

Tutorium Rechnerorganisation

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

Einführung in die Programmierung

Grundlagen. Kapitel 1

How-to: Webserver NAT. Securepoint Security System Version 2007nx

Java: Vererbung. Teil 3: super()

Objektbasierte Entwicklung

Objektorientierte Programmierung. Kapitel 12: Interfaces

Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Gute Lösung:

Praxisorientierte Einführung in C++ Lektion: "Die Compiler-Chain (Vom Quellcode zum ausführbaren Programm)"

Version 0.3. Installation von MinGW und Eclipse CDT

Umwandeln und Exportieren von Adobe-Illustrator-Dateien in Illustrator für Artcut

Lehrer: Einschreibemethoden

U4 Arbeiten mit eigenen PSpice-Modellen

Übung 9. Quellcode Strukturieren Rekursive Datenstrukturen Uebung 9

Adressen im Internet (Wdh.)

Nutzerverwaltung für Moodle über LDAP

Vorkurs C++ Programmierung

TIMI: Technische Informatik für Medieninformatiker

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

Konfigurationsanleitung Access Control Lists (ACL) Funkwerk. Copyright Stefan Dahler Oktober 2008 Version 1.0.

Der HIV-Antikörper-Schnelltest aus Sicht des Labormediziners. Dr. Thomas Berg, Berlin

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

1 Vom Problem zum Programm

Alltagsnotizen eines Softwareentwicklers

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom b

C# im Vergleich zu Java

Softwarepraktikum: Einführung in gcc / g++

Qt-Projekte mit Visual Studio 2005

.NET Code schützen. Projekt.NET. Version 1.0

Testen mit JUnit. Motivation

Einführung in die Programmierung mit C++

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Software-Engineering und Optimierungsanwendungen in der Thermodynamik

Vererbung & Schnittstellen in C#

Der SD-Kartenslot befindet sich an der rechten Gehäuseseite unterhalb der rechteckigen hellgrauen Gummiabdeckung.

Delegatesund Ereignisse

Erstellen einer digitalen Signatur für Adobe-Formulare

Client-Server-Beziehungen

Kurzbeschreibung s&s Arbeitszeiterfassung

Die Programmiersprache C99: Zusammenfassung

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

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

Kapitel 4. Einführung in den Scannergenerator Flex. Einführung in den Scannergenerator Flex Wintersemester 2008/09 1 / 9

Factory Method (Virtual Constructor)

teischl.com Software Design & Services e.u. office@teischl.com

Modulare Programmierung und Bibliotheken

Typumwandlungen bei Referenztypen

Benutzerhandbuch - Elterliche Kontrolle

Evident VDDS-Anbindung von MIZ

Kapitel 12: Übersetzung objektorienter Konzepte

Robotersteuerung. VL Mikrorechentechnik 2. SS 2013 Professur für Prozessleittechnik

Einstellen der Makrosicherheit in Microsoft Word

A. Ersetzung einer veralteten Govello-ID ( Absenderadresse )

Anwendertreffen 20./21. Juni

Design Patterns 2. Model-View-Controller in der Praxis

Grundlagen von Python

C++ Grundlagen. ++ bedeutet Erweiterung zum Ansi C Standard. Hier wird eine Funktion eingeleitet

Software Engineering Klassendiagramme Assoziationen

Stand: Adressnummern ändern Modulbeschreibung

WINDOWS 10 Upgrade. Beispiel: Desktop-Ausschnitt von vorhandenem WIN 8.1 (rechte Ecke der Taskleiste)

Einheitlich für alle Notare bietet XNotar vor allem die folgenden Optionen:

Innere Klassen in Java

5. Abstrakte Klassen. Beispiel (3) Abstrakte Klasse. Beispiel (2) Angenommen, wir wollen die folgende Klassenhierarchie implementieren:

Klassenentwurf. Wie schreiben wir Klassen, die leicht zu verstehen, wartbar und wiederverwendbar sind? Objektorientierte Programmierung mit Java

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala

Success! Bestellausgabe

M. Graefenhan Übungen zu C. Blatt 3. Musterlösung

Kore-Painter. Kostenrechnung bildet das Rückgrat vieler Controlling-Abteilungen.

2. Semester, 2. Prüfung, Lösung

Stammdatenanlage über den Einrichtungsassistenten

Einrichtung eines Zugangs mit einer HBCI-Chipkarte bei der Commerzbank

Fehlerbehebungen bei Verbindungsabbrüchen aus der Telearbeit

Visual Basic Express Debugging

Hex Datei mit Atmel Studio 6 erstellen

Pragmatik von Programmiersprachen

Zusatzmodul Lagerverwaltung

Prozesse und Logs Linux-Kurs der Unix-AG

Fachbericht zum Thema: Anforderungen an ein Datenbanksystem

Programmieren in Java

Einführung in die Programmierung

Daniel Warneke Ein Vortrag im Rahmen des Proseminars Software Pioneers

Transkript:

Source-Files Programm == Source-File nicht sinnvoll Unübersichtlich Bei jeder kleinen Änderung gesamtes File neu übersetzen Übersetzen dauert lange Keine Gruppenarbeit möglich Programm in Source-Files aufteilen Erhöht Lesbarkeit Aufteilung orientier t sich an logischer Struktur des Programms Getrenntes Übersetzen möglich: Nur geänderte Files neu übersetzen Zusammenfügen der getrennt übersetzten Teile zu ausführbarem Programm Linker 2005 AG Rechner netze 4-prog.1

Getrennte Übersetzung Getrennt Übersetz en und Linken mit g++ main.cc main.o libs g++ -c main.cc util.cc util.o prog g++ -c util.cc list.cc list.o g++ -c list.cc g++ -o prog main.o util.o list.o -lx11 2005 AG Rechner netze 4-prog.2

Getrennte Übersetzung Compiler-Flags und -Pässe libs includes objects file.cc tmp file.s file.o prog g++ -E file.cc g++ -S file.cc g++ -c file.cc g++ -c file.s g++ *.cc g++ *.s g++ *.o -libs 2005 AG Rechner netze 4-prog.3

Getrennte Übersetzung: g++ g++: Driver-Programm Präprozessor Eigentlicher Compiler + Optimizer Assembler Linker g++: Optionen E S c O v Wall g o xxx lxxx Nur Präprozessor Nur Präprozessor + Compiler Nur Präprozessor + Compiler + Assembler Optimizer einschalten Einzelne Pässe, Optionen und Argumente anzeigen Viele War nungen ausgeben Debugging mit gdb/dbx ermöglichen Linker : Ausgabefile xxx anlegen (sonst a.out) Linker : mit Librar y xxx linken 2005 AG Rechner netze 4-prog.4

Getrennte Übersetzung: ld Linker (ld) Erzeugt lauffähiges Programm (executable, a.out) Eingabe: Object-Files, Librar ies Löst exter ne Symbole auf (unresolved references).o-files Maschinencode; nicht sprachspezifisch, aber plattfor mspezifisch Nicht ausführbar, muß noch gelinkt werden Enthält noch unresolved references! Libraries Statisch (file.a) oder dynamisch, shared (file.so) Symbole Alle exter nen Symbole müssen aufgelöst werden ( sonst Fehler) Symbol darf nicht mehrfach definiert sein ( sonst Fehler) Symboltabelle in Object-File oder Executable anschauen: nm 2005 AG Rechner netze 4-prog.5

Getrennte Übersetzung Konsistente Deklarationen Source-File nicht in sich abgeschlossen Benutzt Funktionen, Klassen, etc. aus anderen Files oder Librar ies Deklaration vor jeder Benutzung erforder lich Alle Deklarationen müssen konsistent sein Deklarationen müssen konsistent mit Definition sein Jedes Objekt muß genau einmal definier t werden int foo = 12; int bar(double d) { } file1.cc extern int foo; int bar(double); void baz() { foo = bar(1.0); } file2.cc 2005 AG Rechner netze 4-prog.6

Getrennte Übersetzung: Deklarationen int a = 1; char b[10]; extern int c; file1.cc int a; (1) extern char *b; extern int c; (2) (3) file2.cc Typische Fehler (1) Mehr als eine Definition (2) Definition und Deklaration inkonsistent (3) Keine Definition Fehlererkennung Problem: Compiler sieht nur jeweils ein Source-File (1) und (3) werden vom Linker erkannt (2) nicht Absturz zur Laufzeit wahrscheinlich! 2005 AG Rechner netze 4-prog.7

Getrennte Übersetzung: Deklarationen int f(int i) {} int g() {} extern int f(double); extern char *g(); (2) (1) file1.cc file2.cc (1) Definition und Deklaration inkonsistent (Argumente) Fehler kann vom Linker erkannt werden Argument-Typen werden in Symbolnamen kodier t (Over loading!) f(int,double,char*) f FidPc Problem: unterschiedliche Compiler-Konventionen (2) Definition und Deklaration inkonsistent (Return-Typ) Fehler wird nicht erkannt Absturz möglich! 2005 AG Rechner netze 4-prog.8

Getrennte Übersetzung: Deklarationen Ausnahme: const-variablen Definition kann nicht mit exter n impor tier t werden inter nal linkage Lösung: vor jeder Benutzung definieren Ausnahme: inline, (class), typedef, (template), Muß vor jeder Benutzung definiert werden Mehrfachdefinitionen erlaubt, wenn Definitionen tokenweise identisch Definitionen stehen in unterschiedlichen Files 2005 AG Rechner netze 4-prog.9

Header-Files Problem: Konsistente Deklarationen Abhilfe: Header-Files und #include Aufteilung Schnittstelle (.h-file), Implementierung (.cc-file) struct Time { int hour, min, sec; }; Time get_time(); #include "time.h" time.h Time get_time() { } time.cc #include "time.h" int main() { Time now; now = get_time(); main.cc 2005 AG Rechner netze 4-prog.10

Header-Files Was gehör t in Header-Files? Datendeklarationen extern int v; Funktionsdeklarationen int f(double); Typedefinitionen struct coord { int x, y; }; inline-definitionen inline int max(int a, int b) {} enums enum state { on, off }; const-definitionen const state s = off; Template-Definitionen templace<class T> class C {}; Weitere #includes #include "config.h" Makros #define HDR_SIZE 24 ifdefs u.ä. #ifdef DEBUG Was nicht? Datendefinitionen int v; Funktionsdefinitionen int max(int a, int b) {} 2005 AG Rechner netze 4-prog.11

Header-Files Benutzung von Header-Files Rekompilieren nach Änderung eines Header-Files Alle.cc-Files übersetzen, die.h-file includen Wer kzeug: make.cc-file included eigenes.h-file Compiler prüft Deklarationen gegen Definitionen Include-Mechanismus eigentlich kein C++-Sprachmittel Rein textuelle Ersetzung Compiler sieht nur fer tige Übersetzungseinheiten Typische Header-File-Organisation Geschachtelte #includes selten ( Mehrfachdefinitionen möglich) Üblich: ein Header-File pro.cc-file (falls nötig) Eventuell ein gemeinsames Header-File mit globalen Definitionen 2005 AG Rechner netze 4-prog.12

Header-Files #define LIBDIR \ "/usr/local/lib" #define VERSION 3 #define HAVE_X11 config.h #include <iostream.h> #include "config.h" #include "buffer.h" #include "util.h" class Buffer { vector<char> data; }; void save_buffers(); buffer.h #include <vector.h> #include "config.h" #include "buffer.h #include "util.h" void error(char*); util.h #include <iostream.h> #include "config.h" #include "util.h" int main() { Buffer::Buffer() { } void error(char *e) { } main.cc buffer.cc util.cc