Upload
gyula
View
22
Download
0
Embed Size (px)
DESCRIPTION
Einführung in Visual C++. Allgemeines. Visual C++ ist integriert in VisualStudio VisualStudio ist eine Oberfläche, die die Entwicklung, Testung und Pflege von Softwareprojekten unterstützt. Intelligenter Editor Projektunterstützung Leistungsfähiger Debugger Leistungsfähiger Profiler - PowerPoint PPT Presentation
Citation preview
EDV1 - Visual C++
Einführung in Visual C++
ED
V1 - V
isual C
++
2
Allgemeines
• Visual C++ ist integriert in VisualStudio• VisualStudio ist eine Oberfläche, die die Entwicklung, Testung
und Pflege von Softwareprojekten unterstützt.– Intelligenter Editor– Projektunterstützung– Leistungsfähiger Debugger– Leistungsfähiger Profiler
• Für VisualStudio sind viele Compiler vorhanden. Z.B.:– C++– J++– Visual Basic– FoxPro– InterDev (Internet-Applikationen)– Fortran (von Digital Equipment)
ED
V1 - V
isual C
++
3
• Vorteile:– Einheitliche Oberfläche für viele Sprachen– Intelligente Assistenten– Leistungsfähiger Editor– Integration verschiedener Sprachen in einem Projekt– Projektunterstützung (make-Funktion)– Umfangreiche Debug-Möglichkeiten– Umfangreiche Profiler-Möglichkeiten
• Nachteile:– Assistenten erzeugen Texte, die viele Microsoft/Windows-
spezifische Anteile Enthalten geringere Portabilität.– Automatisch generierte Texte sind schwer durchschaubar
und sind daher schwer zu modifizieren.
ED
V1 - V
isual C
++
4
Starten von Visual C++
• Start Programme Microsoft Visual Studio 6.0 Visual C++ 6.0• Datei Neu Projekte Win32Konsolanwendung• Pfad auswählen in dem das Projekt gespeichert werden soll• Projektname eintragen• OK• ‚Eine „Hallo, Welt“-Anwendung erstellen‘ auswählen• OK• OK• Es wird ein Projekt erstellt, das das fertige „Hallo, Welt“-Programm
enthält.• „!“ drücken Alle Programme werden übersetzt, gelinkt und in einem
DOS-Fenster abgearbeitet.
ED
V1 - V
isual C
++
5
Teile des VisualStudio-Fensters
• Links: Anzeige des offenen Projektes– Karten:
• Klassen: zeigt die logische Struktur des Projektes• Dateien: zeigt die Dateistruktur des Projektes• Ressourcen: zeigt allgemeine Ressourcen, wie z.B.
Zeichenketten, Grafiken u.s.w.• Rechts: Bearbeitung von Inhalten (Quelltexte, Grafiken,
Steuerelement u.s.w.)• Unten: Mitteilungsfenster
ED
V1 - V
isual C
++
6
ED
V1 - V
isual C
++
7
Beispiel für Strukturen
• Es soll eine Struktur entwickelt werden, die Personendaten (Name, Adresse, Geburtsdatum) speichert und zugreifbar macht.
• Die Bestandteile sind wiederum Strukturen:– Name: Anrede, Vorname, Nachname– Adresse: Strasse, Postleitzahl, Ort– Geburtsdatum: Tag, Monat, Jahr
• Bestandteile der Strukturen sind Zeichenketten bzw. int-Variable• Zeichenketten können beliebig lang sein.
Alternative: Es werden maximale Längen festgelegt.Nachteil: Es wird oft zu viel oder zu wenig Speicherplatz belegt.
• Es ist günstig für jede der benötigten Strukturen einen eigenen Modul zu definieren (analog Klassen in JAVA).
• Um Implementierung und Definition voneinander trennen zu können benutzt man header-Dateien.
ED
V1 - V
isual C
++
8
Header-Datei
• Enthält die nach außen sichtbaren Definitionen: Datentypen, Prozedurköpfe, Macros.
• Z.B.: datum.h
#ifndef _P_DATUM
#define _P_DATUM
struct datum_struct
{
int tag;
int monat;
int jahr;
};
typedef struct datum_struct datum;
datum create_datum(int tag, int monat, int jahr);
void destroy_datum(datum d);
int datum_toString(char *buffer, int len, datum d);
#endif // _P_DATUM
ED
V1 - V
isual C
++
9
CPP-Datei
• Enthält die Implementierung der Prozeduren.• Z.B.: datum.cpp
#include "stdafx.h"
datum create_datum(int tag, int monat, int jahr)
{
datum d={tag,monat,jahr};
return d;
}
void destroy_datum(datum d){}
int datum_toString(char *buffer, int len, datum d)
{
if (11>len) return 1;
sprintf(buffer,"%2u.%2u.%4u",d.tag,d.monat,d.jahr);
return 0;
}
ED
V1 - V
isual C
++
10
Stdafx.h
• Diese Datei kann benutzt, werden um include-Dateien nur in einer Datei angeben zu müssen.
...
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "datum.h"
#include "adresse.h"
#include "name.h"
#include "person.h"
...
ED
V1 - V
isual C
++
11
Adress-Struktur• adresse.h
#ifndef _P_ADRESSE
#define _P_ADRESSE
struct adresse_struct
{
char *strasse;
int plz;
char *ort;
};
typedef struct adresse_struct adresse;
adresse create_adresse(char *strasse, int plz, char *ort);
void destroy_adresse(adresse a);
int adresse_toString(char *buffer, int len, adresse a);
#endif // _P_ADRESSE
ED
V1 - V
isual C
++
12
• adresse.cpp
#include "stdafx.h"
adresse create_adresse(char *strasse, int plz, char *ort)
{
adresse a;
a.strasse=(char *)malloc(strlen(strasse)+1);
strcpy(a.strasse,strasse);
a.plz=plz;
a.ort=(char *)malloc(strlen(ort)+1);
strcpy(a.ort,ort);
return a;
}
void destroy_adresse(adresse a)
{
free(a.strasse);
free(a.ort);
}
ED
V1 - V
isual C
++
13
int adresse_toString(char *buffer, int len, adresse a){
char b[20];int l=0;l=strlen(a.strasse)+1; if (l>len) return 1;strcpy(buffer,a.strasse);l++; if (l>len) return 2;strcat(buffer,"\n");sprintf(b,"%u",a.plz);l+=strlen(b); if (l>len) return 3;strcat(buffer,b);l++; if (l>len) return 4;strcat(buffer," ");l+=strlen(a.ort); if (l>len) return 5;strcat(buffer,a.ort);return 0;
}
ED
V1 - V
isual C
++
14
Mit VisualStudio Debuggen
• Debuggen ist das Entfernen von Bugs aus Programmen.• Häufige Fehler sind z.B.:
– Fehlerhafte Tests (< statt <= ...)– Syntaktische Fehler (= statt ==, fehlende break-Anweisung)– Fehlerhafte Indizes– Schreiben über das Ende des Feldes oder der Zeichenkette.– Negative Indizes bei Feldern.– Fehlen des 0-Zeichens am Ende von Zeichenketten.– Fehlerhafte Parameter beim Aufruf von Prozeduren.
ED
V1 - V
isual C
++
15
Kommandos im Debug-Modus
• Erneut [im Debug-Modus] starten (Ctrl+Shift+F5)• Debug beenden (Shift+F5)• Ausführung anhalten• Code-Änderung zuweisen (Alt+F10)• Nächste Anweisung anzeigen (Alt+Num*)• In Aufruf springen (F11)• Aufruf als ein Schritt (F10)• Ausführen bis Rücksprung (Shift+F11)• Ausführen bis Cursor (Alt+F10)• Schnellüberwachung (Shift+F9)• Es können verschiedene Fenster für unterschiwdliche Anzeigen
geöffnet werden.
ED
V1 - V
isual C
++
16
Profilen
• Profilen dient der Optimierung von Programmen. Es können z.B. folgende Fragen beantwortet wird:– Welche Module werden wirklich benötigt?– Welche Anweisungen werden abgearbeitet?– Welche Module verbrauchen am meisten Rechenzeit?– In weichen Abschnitten wird am meisten Rechenzeit
verbraucht?