160 likes | 260 Views
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
E N D
Einführung in Visual C++ EDV1 - 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 • Für VisualStudio sind viele Compiler vorhanden. Z.B.: • C++ • J++ • Visual Basic • FoxPro • InterDev (Internet-Applikationen) • Fortran (von Digital Equipment) EDV1 - Visual C++
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. EDV1 - Visual C++
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. EDV1 - Visual C++
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 EDV1 - Visual C++
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. EDV1 - Visual C++
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 EDV1 - Visual C++
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; } EDV1 - Visual C++
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" ... EDV1 - Visual C++
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 EDV1 - Visual C++
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); } EDV1 - Visual C++
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; } EDV1 - Visual C++
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. EDV1 - Visual C++
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. EDV1 - Visual C++
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? EDV1 - Visual C++