Home
Navigation
Impressum
Coder Welten - Programmierung und Optimierung
Coder Welten
 
 

 

 

Hallo Welt!

Ein erstes kleines Programm in C und C++

Zwischenmenschliche Begrüßungsformen unterscheiden sich von Region zu Region, doch trotz aller Unterschiede, ein schlichtes "Hallo", oftmals gefolgt von dem Namen der gegrüßten Person, versteht wohl beinahe jeder Erdenbewohner. So setzte sich dieses "Hallo" auch bei der Vorstellung von Programmiersprachen durch, mit dem Unterschied, dass in diesem Fall sich der Gruß nicht an eine bestimmte Person richtet, sondern der Rest der Welt begrüßt wird. Nachfolgend einige "Hallo Welt" Programme, geschrieben in C und C++.

In den ersten Zeilen eines Quellcodes, gleich hinter einem einleitenden Kommentar (der nicht zwingend vorgeschrieben ist), erfolgt in allen C/C++ Programmen mit Hilfe der Include-Anweisung (Präprozessor-Direktive) die Einbindung mindestens einer Headerdatei. Im ersten Beispiel wird die Headerdatei stdio.h eingebunden. Der Include-Anweisung muss eine Raute # vorangestellt werden, damit der Prä­pro­zessor die Zeile als Direktive erkennt. In den Headerdatein sind Deklarationen für Funktionen enthalten, die Funktionen sind wiederum in bereits kompilierten Bibliotheken enthalten. In C++ enthalten die Bibliotheken nicht nur Funktionen, sondern auch Klassen.

Weiterhin benötigt jedes C/C++ Programm eine Eintrittfunktion. In der Regel handelt es sich dabei um die Funktion main(), außer wenn auf die Win32-API zuge­griffen wird. Innerhalb der Eintrittfunktion werden weitere Funktionen für den Programmablauf benötigt, im Beispiel die Funktion printf() zur Ausgabe des Strings "Hallo Welt". Die Funktion getchar() wird in den Beispielen hingegen zweck­ent­fremdet als "Notlösung" verwendet.
Im Normal würde beim Aufruf der kompilierten projektname.exe das MS DOS-Konsolenfenster (Eingabeaufforderung) kurz öffnen, das Programm abgearbeitet und anschließend würde sich das Konsolenfenster wieder schließen. Die zeitliche Dauer des Programmablaufs würde nur Bruchteile einer Sekunde betragen und wir würden das Konsolenfenster kaum richtig erblicken. Die Funktion getchar() wartet hingegen auf die Eingabe von Zeichen und bevor wir nicht die Eingabe- oder Entertaste betätigten, schließt sich das geöffnete Fenster nicht.

/* Ein Beispiel in C */

#include <stdio.h>

int main() {

    printf("Hallo Welt!");

    getchar();
    return 0;
}

Da die Hochsprache C++ sich aus der Hochsprache C entwickelte, wurden in C++ die Bibliotheken von C übernommen. Nur besitzen die von C übernommenen und für C++ modernisierten Headerdateien keine Endung (Extension) mehr. Die für C typische Extension ".h" fehlt somit und statt dessen wurden die übernommenen Headerdateien mit einem vorangestellten c gekennzeichnet. Aus stdio.h wurde somit durch die Modernisierung der Headerdateien cstdio.
Weiterhin wurden in C++ Namensräume eingeführt. Im Beispiel steht std:: für den Namensraum std der Standardbibliothek, wobei es sich bei :: nur um einen Operator handelt.

/* Ein Beispiel in C++ */

#include <cstdio>

int main() {

    std::printf("Hallo Welt!");

    getchar();
    return 0;
}

Obwohl die von C übernommene Funktion printf() auch in C++ weiterhin für die Ausgabe von Strings und Argumenten benutzt werden kann, wurde diese in C++ durch das Streamobjekt cout (Console Output) für die Standardausgabe abgelöst. Ein Streamobjekt ist ein Kanal, in dem Datenströme fließen. Neben cout sind im folgendem Beispiel noch der Ausgabeoperator << und der Manipulator "endl" hinzugekommen, der einen Zeilenvorschub bewirkt.
Weiterhin wurde statt getchar() cin.get() benutzt, um das Programm in den Wartemodus zu versetzen. Bei cin (Console Input) handelt es sich ebenfalls um ein Streamobjekt für die Standardeingabe. Bei der Verwendung der Streamobjekte (Datenstromkanäle) cout und cin muss die Headerdatei iostream eingebunden werden.

/* Ein weiteres Beispiel in C++ */

#include <iostream>

int main() {

    std::cout << "Hallo Welt!" << std::endl;

    std::cin.get();
    return 0;
}

Für eine .NET-Konsolenanwendung unter dem Betriebssystem Windows eignet sich weiterhin der folgende Code. Da das .NET Framework eigene Bibliotheken mit sich bringt, kann auf die Einbindung einer Headerdatei verzichtet werden.
Damit sich das Konsolenfenster nicht vorzeitig schließt, kann die Methode Console::ReadLine verwendet werden, die auf eine Eingabe wartet. Das Fenster lässt sich mit einem Klick auf Enter schließen.

/* Ein Beispiel in C++ für eine .NET-Konsolenanwendung */

int main() {

    System::Console::WriteLine("Hallo Welt!");

    System::Console::ReadLine();
    return 0;
}

Alle bisherigen Beispielprogramme würden folgende Ausgabe bewirken:

Hallo Welt

Nachfolgen noch ein Listing mit einem in C geschriebenen Programm, mit dem auf die Win32-API zugegriffen wird, um eine Nachricht in einem Mitteilungsfenster auszugeben. Bei Programmen, welche als Schnittstelle die Win32-API benutzen, muss als Eintrittsfunktion nicht main(), sondern WinMain() benutzt werden und als Headerdatei windows.h.
Dieser kleine Script-Schnipsel ließe sich als C wie als C++ Anwendung kompilieren und so sei als Hinweis angemerkt, ein Programm wird erst dann zu einem "echten" C-Programm, wenn es auch als C-Programm kompiliert wird. Mehr dazu unter: Projekteigenschaften auswählen

/* Ein Beispiel in C und mit der Win32-API */

#include <windows.h>

int WINAPI WinMain(HINSTANCE ac1,
                   HINSTANCE ac2,
                   LPSTR     ac3,
                   int       ac4)

{MessageBox(NULL, TEXT("Hallo Welt!"), TEXT("Mitteilung"), 0);
 return 0; 
} 

Hallo Welt im FensterDas Ergebnis des obigen Programms wäre, das sich beim Aufruf der projektname.exe ein kleines Fenster, ähnlich dem abgebildeten Fenster, mit der Begrüßung "Hallo Welt" öffnen würde.
Nebenbei bemerkt, das Kürzel API (Application Pro­gramming Interface) steht im deutschen Sprach­ge­brauch für Applikations Programmierungs-Schnittstelle bzw. als Kürzel für Schnittstelle zur Anwendungs­pro­grammierung. In Erweiterung steht das Kürzel WinAPI dementsprechend für die Windows-Anwendungs-Programmierschnittstelle (englisch: Windows Application Programming Interface).

Die obige Schreibweise mit ac 1 bis 4, die als Demo ein Dialogfenster erzeugt, würde hingegen bei dem Versuch ein richtiges Programmfenster zu erzeugen, kläg­lich scheitern. Besser ist es aus diesem Grund sich gleich an die Schreibweise zu gewöhnen, die auch in den einzelnenen Headerdateien verwendet wird.

/* Zweites Beispiel mit der Win32-API */

#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance,
                   HINSTANCE hPrevInstance,
                   LPSTR     lpCmdLine,
                   int       nShowCmd)

{MessageBox(NULL,
            TEXT("Hallo Welt, was tun?"),
            TEXT("Mitteilung"),
            MB_RETRYCANCEL | MB_ICONEXCLAMATION);
return 0;
}

Hallo Welt DialogfensterBei den Dialogfenstern auf dieser Seite handelt es sich freilich noch um keine echten und ausbaufähigen Fenster für An­wendungen. Windows-Anwendungen benö­tigen ein Hauptfenster für eine Anwendung und selbst dann, wenn dieses Hauptfenster leer bleibt oder nicht mehr als ein einfaches "Hallo Welt" ausgibt, ist die Erstellung recht aufwendig und der fertige Code besteht nicht nur aus einigen wenigen Zeilen, wie in den Beispielen auf dieser Seite.

Mehr dazu unter: Erstellung von Fenstern

Wesentlich aufwendiger gestaltet sich ein kleines "Hallo Welt" Programm für Mikro­controller, letztendlich weil für die Ausgabe ein LED-Modul oder eine LCD-Anzeige erfor­der­lich ist.

 

Copyright © Verlag Horst Müller - Stendal - 2006 - Impressum - Datenschutz - Nutzungsbedingungen