Artikel zu C und C++

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.

Sprache

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++

Standard Template Library (STL)

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

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.

Inter Process Communication (IPC)

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
CORBA ist ein Mittel zur relativ komfortablen Realisierung verteilter Software. Dieses Tutorial beschreibt den Einstieg in die Verwendung von CORBA in C++ Programmen.

Libraries und APIs

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

Compiler, Debugger, IDEs

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

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.