Eine Reihe von Artikeln, die sich mit verschiedenen praxisorientierten Aspekten der Programmiersprachen C und C++ befassen. Ursprünglich wurden sie für das (nicht mehr existierende) C/C++ Portal von meOme verfasst.
Polymorphie und heterogene Container
Die Speicherung von Objekten mit unterschiedlichem Typ in einem
einzigen Container ist nicht trivial. Der Artikel zeigt die
richtige Vorgehensweise.
Performancetuning
Wenn die Programmausführung quälend langsam vonstatten
geht, dann ist ein Tuning der Performance nötig. Wir zeigen,
wie dies mittels einfacher C++ Bordmittel möglich ist.
Namespaces
Die aktive Verwendung von Namespaces erlaubt die bessere
Strukturierung großer Softwareprojekte.
Reference
Counting
Reference Counting verbindet den Vorteil der automatischen Freigabe
von Objektressourcen mit der beliebigen Kopierbarkeit des
Objektes.
Templates
(1)
Templates (deutsch: Schablonen) sind ein mächtiges Instrument
zur effektiven Kodierung von Algorithmen in C++. Insbesondere die
Wiederverwendbarkeit des Kodes wird drastisch verbessert.
Templates
(2)
Anhand eines Algorithmus zur Speicherung von beliebigen Objekten in
einem Stack wird die Erstellung von Klassentemplates
erklärt.
Parameterübergabe an
Funktionen
Parameter lassen sich in C++ an Funktionen per value, per pointer
oder per reference übergeben. Nach welchen Kriterien soll der
Programmierer nun die richtige Auswahl treffen?
Konstanten
Die Deklaration konstanter Objekte, Parameter und Memberfunktionen
ist eine wichtige Komponente der strukturierten Programmierung und
hilft bei der Vermeidung von Fehlern.
Die 12 häufigsten
Programmierfehler
Immer wieder werden die gleichen Fehler gemacht... Diese Liste
enthält die zwölf am häufigsten vorkommenden Fehler
in der C-Programmierung und soll dabei helfen, selbige zu
vermeiden.
Exceptions
Die Behandlung von Fehlern und Ausnahmesituationen mittels
Exceptions ist ein wichtiger Bestandteil von C++
STL
Container
Container sind ein grundlegendes Element der STL. Welche gibt es
und wie werden sie verwendet?
Functors -
Funktionsobjekte
Functors sind universell verwendbare Funktionsobjekte. Sie
erweitern das aus C bekannte Konzept der Funktionszeiger.
STL
Zufälle
Wenn der Zufall bei der Programmausführung eine Rolle spielen
soll, dann kann der STL-Algorithmus random_shuffle Anwendung
finden.
Zeigerautomatik mit
auto_ptr
Das Template auto_ptr aus der STL hilft bei der Vermeidung von
Speicherlecks.
Streams
(1)
Streams sind das universelle Mittel zur Ein- und Ausgabe von Daten
in C++.
Streams (2) -
Manipulatoren
Um die Ein- und Ausgabe nach eigenen Wünschen gestalten zu
können, hat der C++ Entwickler die Möglichkeit, den
Datenstrom durch Manipulatoren zu steuern.
Streams (3) -
Nutzerdefinierte Manipulatoren
Zusätzlich zu den Standard Stream-Manipulatoren kann der
Entwickler eigene Manipulatoren definieren. Lohn der Mühe ist
einfacher zu schreibender und besser zu verstehender Code.
Streams (4) -
String Streams
String Streams sind ein universelles Mittel zur Konvertierung
unterschiedlicher Datenformate ineinander. Vor allem lässt
sich die oft benötigte Umwandlung von Strings in ihre
numerischen Entsprechungen damit realisieren.
Vektoren und
Listen
Die Standard Template Library (STL) enthält nützliche
Container-Templates zur sequentiellen Speicherung von Objekten.
Diese sind weitaus komfortabler einzusetzen als die aus ANSI-C
bekannten (und berüchtigten) Arrays.
Strings -
Zeichenketten
Für den C-Programmierer ist die Beschäftigung mit
Zeichenketten eine nervende und zeitraubende Tätigkeit.
Für den Nutzer der STL unter C++ wird dagegen alles
gut...
Ein- und Ausgabe von
Dateien
Dieser Artikel beantwortet die Fragen: Wie kann man eine Datei in
einem C++ Programm einlesen? Wie wird in eine Datei geschrieben?
Wie lassen sich Fehler bei diesen Operationen abfangen?
Assoziative Container
in der STL
Die wichtigste Ergänzung des neuen C++ Standards ist die
Standard Template Library (STL).
Multithreading -
Einführung
Mit Multithreading wird die Fähigkeit eines Programms
bezeichnet, mehrere Aktivitätsstränge (Threads) parallel
auszuführen.
Multithreading -
JThreads/C++
Die Entwicklung von multithreaded C++-Programmen unter Windows und
Unix lässt sich unter Zuhilfenahme des Paketes JThreads/C++
relativ einfach bewerkstelligen.
Mailtransfer mit Pipes
und Childs
Anhand eines C-Programmes zum Mailversand wird erklärt, wie
mittels der UNIX-Systemaufrufe pipe(), fork() und exec() ein
externes Programm gestartet und an dieses Daten über eine Pipe
geschickt werden können.
Synchronisation von
Prozessen
Beim Austausch von Daten zwischen unabhängig ablaufenden
Prozessen können seltsame Resultate aufgrund des asynchronen
Zugriffs auf gemeinsam genutzte Ressourcen auftreten. Eine
Synchronisation der Prozesse durch Verwendung von Sperrmechanismen
wie Semaphoren schafft Abhilfe.
Memory Mapped
Files
Wenn verschiedene Prozesse Daten untereinander austauschen sollen,
so kann dazu auf Memory Mapped Files zurückgegriffen werden.
Dies sind Dateien, die sich per Systemaufruf in den Arbeitsspeicher
eines oder mehrerer Prozesse einblenden lassen.
Netzwerkprogrammierung Teil 1:
Client
Das Erstellen von Netzwerkprogrammen, die per TCP/IP miteinander
kommunizieren, gestaltet sich mittels C und der Socketschnittstelle
relativ einfach. Es wird ein Netzwerkclient vorgestellt, der per
HTTP Seiten von einem Webserver laden kann.
Netzwerkprogrammierung Teil 2:
Server
Die Entwicklung von Serverprogrammen gestaltet sich prinzipiell
nicht wesentlich komplizierter als die Clientprogrammierung. In
diesem Artikel wird der vollständige Quellcode eines einfachen
Webservers gezeigt.
Erweiterte
Netzwerkprogrammierung
Die Weiterentwicklung der in den vorangegangenen Artikeln
beschriebenen Client/Server-Anwendung stellt den Programmierer vor
eine Reihe von Herausforderungen. Zu deren Bewältigung greift
man am besten auf bestehende Lösungen zurück, zum
Beispiel auf das ADAPTIVE Communication Environment (ACE).
CORBA
CORBA ist ein Mittel zur relativ komfortablen Realisierung
verteilter Software. Dieses Tutorial beschreibt den Einstieg in die
Verwendung von CORBA in C++ Programmen.
Verzeichnisse
Die POSIX Bibliotheken stellen einfache Funktionen für die
Arbeit mit den Verzeichnissen des Dateisystems zur
Verfügung.
Programm und
Umgebung
Das Verhalten eines Programmes lässt sich über seine
Umgebung beeinflussen. Dieser Artikel erklärt die dafür
notwendigen Werkzeuge.
C++
Nachbrenner
Die Boost C++ Libraries bieten nützliche und hochqualitative
Erweiterungen für C++.
Zeitrechnungen
Auf welchen Wochentag fiel der 1. Februar? Wieviele Tage sind es
noch bis Weihnachten? Die Standard C Library enthält alle zur
Berechnung notwendigen Routinen.
Around The
World
Die »Locale« Funktionen dienen zur Anpassung der
Standard C Library an länderspezifische Gegebenheiten.
Was passiert am 9.
September?
Am 9. September 2001 wird ein interner Zeitzähler der Unix-
und Windows-Systeme erstmals zehnstellig. Kein Problem - oder kommt
jetzt erst der richtige Milleniums-GAU?
Reguläre
Ausdrücke
Reguläre Ausdrücke sind ein mächtiges Instrument, um
Texte zu durchsuchen und zu formatieren. In Programmiersprachen wie
Perl sind sie daher schon fest eingebaut; der C++ Programmierer
kann Bibliotheken wie Boost regex oder pcre einsetzen.
Zufallszahlen
Immer wieder benötigt der Programmierer zufällig erzeugte
Zahlen, sei es um Simulationen einer sich chaotisch verhaltenden
Umwelt durchzuführen oder einem Spiel eine unvorhersehbare
Wendung zu geben. Dafür stellt C einen eingebauten
Zufallszahlengenerator zur Verfügung.
Rechnen mit beliebiger
Genauigkeit
Die Genauigkeit der in die Programmierspache C eingebauten
Arithmetik ist begrenzt. Erst mit der GNU Multiple Precision
Arithmetic Library wird das Rechnen mit beliebig langen Zahlen
möglich.
MAC Adresse
Dieser Beitrag zeigt zwei Methoden zur Bestimmung der MAC-Adresse
eines Netzwerkadapters
C++ programmieren mit Eclipse CDT
Das Eclipse C/C++ Development Toolkit (CDT) kombiniert das Look and Feel von Eclipse mit der Power des GNU Compilers.
Bloodshed
Dev-C++
Dev-C++ ist eine integrierte Entwicklungsumgebung auf Basis des
MinGW Compilersystems. Sie unterliegt der GNU General Public
License und ist ideal für Einsteiger in die C++
Programmierung.
Der Borland C++
Compiler 5.5
Der C++ Compiler von Borland in der Version 5.5 für Windows
ist kostenlos zu haben. Wie erzeugt man nun damit aus C++ Code ein
ausführbares Programm?
cygwin: GNU unter
Windows
Die populären GNU-Tools, insbesondere C- und C++-Compiler,
sind jedem Unix-Anwender bekannt. Cygwin ist die frei
verfügbare Portierung dieser Tools auf Windows 95, 98 und
NT.
LCC-Win32: Die freie
Windows IDE
LCC-Win32 ist eine freie kostenlose C Entwicklungsumgebung für
Windows 95/98 und NT.
Speicherkontrolle
C und C++ überlassen die Verwaltung von dynamischem Speicher
dem Programmierer. Macht dieser dabei Fehler, beginnt eine meist
aufwendige Suchaktion. Memory-Debugger helfen dabei.
Versionsverwaltung
Während des Lebenszyklus eines Softwareprojektes ändert
sich der Programmcode laufend. Tools zur Versionsverwaltung, wie
RCS und CVS, helfen hier den Überblick zu behalten.
Versionsverwaltung
II
Das Concurrent Version System (CVS) ist das wohl am weitesten
verbreitete Versionsverwaltungstool, vor allem für Open Source
Projekte.
C Programmieren lernen mit dem C-HowTo
Dieses C Handbuch ist nicht nur eine Einführung in die Programmiersprache C, sondern vermittelt Anfängern auch ein praktisches Verständnis für die Programmierung im Allgemeinen.
Gelesen: Design
Patterns Explained
Das Buch von Alan Shalloway und James R. Trott verspricht eine
»Neue Perspektive des Objektorientierten Designs«.
Gelesen: C++
Programmierung von A. Willms
Das Buch »C++ Programmierung« von André Willms
aus dem Verlag Addison Wesley ist ein guter Einstieg für C
Entwickler, die auf C++ »upgraden« wollen
Gelesen: Ein
Lehrbuch zu C und C++
Das Buch »C/C++ - Von den Grundlagen zur professionellen
Programmierung« von Ulrich Kaiser eignet sich hervorragend
zum Erlernen der Programmiersprachen C und C++.
Gelesen: Das C#
Buch von Eric Gunnerson
Das Buch »C# - Die neue Sprache für Microsofts
.NET-Plattform« von Eric Gunnerson ist als Lehrbuch und
Nachschlagewerk gleichermaßen gut geeignet.