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äprozessor 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 zugegriffen 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 zweckentfremdet
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:
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; }
Das
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 Programming Interface) steht im deutschen Sprachgebrauch
für Applikations Programmierungs-Schnittstelle bzw. als Kürzel für Schnittstelle zur Anwendungsprogrammierung.
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äglich 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; }
Bei
den Dialogfenstern auf dieser Seite handelt es sich freilich noch um keine echten und ausbaufähigen
Fenster für Anwendungen. 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 Mikrocontroller, letztendlich weil für die Ausgabe ein LED-Modul oder eine LCD-Anzeige erforderlich ist.
Einstieg in C/C++
Win32-API
NET Framework