Tutorial #2 - Der Quellcode, das Grundgerüst eines C++ Projekts

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Tutorial #2 - Der Quellcode, das Grundgerüst eines C++ Projekts

    Aufgrund mehrerer Anfragen, editiere ich dieses Tutorial nun komplett. Eig. wollte ich das jedes Tutorial aufeinander aufbaut. Dies ist mir jedoch im zweiten misslungen.
    Von daher wird dieses Tutorial noch einmal komplett überarbeitet.


    • #1 Quelltext - der erste Kontakt
    Bevor es weitergeht, sollten es nicht versäumen, einen Blick auf den Quelltext zu werfen, den Visual C++ für uns erzeugt hat.
    Bei diesem Code handelt es sich um das sogenannte Anwendungsgerüst, das Visual C++ jedes mal anlegt, wenn Sie sich im Dialogfeld zu dem Befehl Datei > Neu > Projekt für eine Windows Forms-Anwendung entscheiden. Es ist aber keineswegs
    das einzige mögliche Anwendungsgerüst. Konsolenanwendungen, Klassenbibliotheken etc. sind bspw. C++ Projekte, die über eigene, anders aufgebaute Anwendungsgerüste verfügen.
    Wenn wir uns im folgenden das von Visual C++ vorgegebene Codegerüst für Windows Forms-Anwendungen etwas näher ansehen, wollen wir uns dabei mit einigen grundlegenden Elementen der C++ Syntax vertraut machen. Aber bitte, es geht wirklich nur darum, einen groben Überblick zu gewinnen und einige wichtige Begriffe schon einmal gehört zu haben. Um den Code des Anwendungsgerüsts wirklich detailliert erklären zu können, müsste man nahezu alle Konzepte und Elemente von C++ auf einmal vorstellen. Das ist natürlich weder möglich noch sinnvoll. Später wird alles Wichtige zur C++ Syntax noch einmal erklärt.
    • #1.1 Die Programmdatei
    Beginnen wir mit der Quelltextdatei, die den Startcode unseres Programms enthält: ErstesProjekt.cpp.
    [cpp]// ErstesProjekt.cpp: Hauptprojektdatei.

    #include "stdafx.h"
    #include "Form1.h"

    using namespace ErstesProjekt;

    [STAThreadAttribute]
    int main(array<System::String ^> ^args)
    {
    // Aktivieren visueller Effekte von Windows XP, bevor Steuerelemente erstellt werden
    Application::EnableVisualStyles();
    Application::SetCompatibleTextRenderingDefault(false);

    // Hauptfenster erstellen und ausführen
    Application::Run(gcnew Form1());
    return 0;
    }[/cpp]

    Das sieht ja alles ziemlich kryptisch aus, aber lassen Sie sich nicht entmutigen. Wir greifen nur einige wichtige Elemente heraus.

    • #2 //-Kommentare
    Wir beginnen mit der obersten Zeile, die durch zwei / eingeleitet wird.
    Jede zeile, die so beginnt, ist eine Kommentarzeile und wird vom Compiler ignoriert. Kommentare sind in den Quelltext eingefügte Erläuterungen, die dem Programmierer das Lesen und Verstehen des Quelltextes erleichtern sollen.
    C++ kennt zwei Arten von Kommentaren:
    • //-Kommentare Alles, was auf die doppelten / folgt, wird vom Compiler als Kommentar angesehen. Der Kommentar endet mit dem Zeilenende. (Die //-Zeichen müssen nicht notwendigerweise am Anfang einer Zeile stehen, sie können auch hinter echtem C++-Code stehen.)
    • /* */-Kommentare - Die Zeichenfolge /* leitet einen Kommentar ein, der sich auch über mehrere Zeilen erstrecken kann und erst mit dem abschließenden */ endet.
    • #3 int main()
    Gehen wir weiter zu den folgenden Zeilen:
    [cpp][STAThreadAttribute]
    int main(array<System::String ^> ^args)
    {


    ...


    }[/cpp]

    Die obere Zeile setzt ein Attribut (in eckigen Klammern). Attribute sind eine Spezialität des .NET Frameworks, sie haben nichts mit C++ zu tun. Da es sich zudem um ein Konzept für fortgeschrittene Programmierer handelt, akzeptieren wir es einfach so, wie es Visual C++ für uns gesetzt hat.

    In der nächsten Zeile beginnt eine Definition und zwar eine Funktionsdefinition. Funktionen erkennt man an dem Klammerpaar () nach dem Namen. Danach folgt ein Paar von geschweiften Klammern, die den sogenannten Funktionsrumpf bilden und die Anweisungen enthalten, die bei Aufruf der Funktion ausgeführt werden sollen.

    Was diese Anweisungen bedeuten erfahren Sie gleich. Zuvor aber möchte ich Ihre Aufmerksamkeit noch auf den Code innerhalb der runden Klammern lenken. Dieser Code sieht so grauenhaft und kryptisch aus, dass er zart besaiteten Verfolgern meines Tutorials schnell die Haare zu Berge stehen lässt. Darum: Vergessen Sie ihn einfach. Er dient dazu, dem Programm beim programmstart Parameter zu übergeben. Wir werden uns mit dieser Technik später noch befassen. Bis dahin ignorieren wir den Parameter einfach.

    Von dem unnötigen Ballast befreit, sieht unsere main-Funktion nun wie folgt aus:
    [cpp]int main()
    {
    }[/cpp]

    Der main()-Funktion kommt im Programm ein ganz besonderer Stellenwert zu. Funktionen und ihrere objektorientierten Gegenstücke, die Methode, sind die Stellen, wo in einem C++ Programm wirklich etwas passiert, wo richtige Befehle ausgeführt werden. Alles andere (wie z.B. Variablen- oder Klassendefinitionen) dient letzten Endes nur dazu, die Elemente zu beschreiben, mit denen mindestens eine Funktion, mit der die Ausführung des Programms durch den Computer beginnt. Schließlich muss dieser ja wissen, wo es losgehen soll. Und diese Funktion muss den Namen main() tragen auch exakt wie oben mit int main() beignnen.

    Laut C++ Standard muss main() eigentlich als
    [cpp]int main() {}[/cpp]

    oder

    [cpp]intmain(int argc, char *argv[]) {}[/cpp]
    definiert werden.
    Viele Compiler erlauben aber auch die Definition mit void (also bspw. void main()). Diese Visual C++ Variante

    [cpp]int main (array<System::String ^> ^args) {}[/cpp]
    ist eine Adaption an das .NET Framework.

    Dies war jetzt die überarbeitete Form des zweiten Tutorials.
    Im nächsten werden wir uns mit Application::Run() beschäftigen.
    Bis dahin, frohes Lernen, wünscht euch euer Nico. :)

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von Numex ()