Verschenke C++ Anfängerbeispiel



  • Den Code kompilieren, anschließend die cmd, bash, nash oder sonstiges öffnen
    und das Programm starten. Ich habe das Programm ausgiebig kommentiert.

    /* Ein absolutes C++ Beginner Tut */

    main.cpp

    /* Anfängerbeispiel, made by Compiler ... for new "Coder".
       Wenn man einen Text mit der Zeichenfolge /* beginnt, 
       dann handelt es sich um einen mehrzeilgen Kommentar. 
       Ein Kommentar endet mit der Zeichenfolge */ 
    
    /* Der gesamte Text, den ich hier schreibe, 
       kann auch genau so im Quellcode stehen bleiben. 
       Kommentare werden durch den so genannten 
       Präprozessor einfach überlesen, wenn das Programm 
       kompiliert wird. Der Begriff Kompiler oder 
       kompilieren verbirgt einen ganz schön schweren Brocken, 
       der hier in einem Satz erläutert werden soll. 
       Das Kompilieren ist der Vorgang wenn die C++ Sprache, 
       die für uns Programmierer leserlich ist, in 
       einen für den Computer lesbaren Maschinencode 
       umgewandelt wird. */
    
    // Dies ist ein einzeiliger Kommentar 
    
    // Wird mit dem doppel Slash eingeleitet
    
     /* Autor: Compiler
        Datum: 01.12.2006
        Short Description:
              Das Programm gibt eine Zeichenkette auf den
              Bildschirm aus, hier soll zunächst der Name
              des Programmierers erscheinen. 
    
        Angaben und Kurzbeschreibungen in dieser Form 
        solltten in jedem Code stehen. */
    
    // -----------------------------------------------------------
    
    /* In jedem Programm werden die Bibliotheken
       eingebunden, die ein Programmierer benötigt.
       Dies geschieht mit dem Ausdruck #include gefolgt
       von der Bibliothek, die man verwendet. Hier wird
       die string Bibliothek benötigt, zum Verwenden von
       Zeichenketten und die iostream Bibliothek, zur
       Ausgabe von Text auf den Bildschirm. 
       Die moderne C++ Syntax verzichtet auf die
       Endung .h, ALSO NICHT #include <string.h> sondern 
       #include <string>, so fern strings und 
       Manipulationen von Strings im Code benötigt werden 
       und dafür der Zusatz:
       using namespace std; 
       Die C-Bibliotheken benötigen aber weiterhin das .h,
       also z.B. #include <conio.h> */
    #include <string>
    #include <iostream>
    using namespace std;
    
    /* Das Hauptprogramm beginnt mit
       der Zeile: int main (void)
       Das Hauptprogramm verhält sich
       wie eine normale Funktion. Das
       int vor dem main gibt an, dass
       die Funktion einen Integerwert
       zurückgibt. Dies ermöglicht den
       Ausstieg aus einer Funktion und
       hier eben aus dem Hauptprogramm,
       zu verschiedenen Zeitpunkten. */
    
    int main (void)
    {
        /* Als erstes wird eine
           Variable name vom Typ
           string angelegt. Der 
           Inhalt von Name enthält den
           Wert DEIN_NAME. Dieser sollte
           durch den eigenen Namen 
           ersetzt werden. */
        string name = "DEIN_NAME";
    
        /* Unter Linux wird der Aufruf 
           system("clear"); eingesetzt. Dies
           säubert das Kommandozeilenfenster 
           von sämtlichen Ausgaben, die im
           Fenster stehen. Hier wird 
           system("cls") für Windows benutzt. */
        system("cls");
    
        /* Mit cout werden Texte ausgegeben oder
           eben Variablen, wie die oben angelegte
           string Variable name, mit dem Inhalt
           DEIN_NAME. Mit der Zeichenfolge \n wird
           ein Zeilenumbruch erzwungen. Alternativ
           ist auch möglich:
           cout << "Hallo " << name << "!" << endl;
           cout << "Ich bin dein erstes Proggy!!!" << endl << endl; */
        cout << "Hallo " << name << "!\n";
        cout << "Ich bin dein erstes Proggy!!!\n\n";
    
        // Sauberer Ausstieg aus dem Hauptprogramm
        return 0;
    }
    
    /* Anmerkungen: 
       Es ist offensichtlich, dass jeder abgeschlossene
       Befehl mit dem Strich-Punkt endet, unbedingt darauf
       achten, um dumme Fehler zu vermeiden.
    
       Testen: 
       Mit return 0; kann bereits zu einem früheren Zeitpunkt 
       aus dem Hauptprogramm ausgestiegen werden. Daher
       sollte man return 0; am Schluss auskommentieren und
       nach
       1. system("cls");
       2. cout << "Hallo " << name << "!\n";
       setzen.
       Bei
       1. wird nichts ausgegeben, da das Programm vorher
          terminiert.
       2. Es wird lediglich die erste Zeile ausgegeben.
    
       VIEL SPASS, KOMPILER !!!!!!!!!!!!!!!!!!! */
    

    Ich würde mich sehr über ein Feedback freuen, ob alles verständlich ist und ob ich zukünftig weitere Beispiele in das Forum einbringen soll. xD



  • 42



  • Die C-Bibliotheken benötigen aber weiterhin das .h, also z.B. #include <conio.h>

    Das ist so nicht völlig korrekt, z.B. cstring, cmath, ctime, ...

    // Sauberer Ausstieg aus dem Hauptprogramm
    return 0;

    "Sauber" ist hier unverständlich. Man sollte erklären, wem und warum hier ein Wert zurück gegeben wird und was "passiert", wenn man das "unsauber" weg lässt (nämlich garnichts).



  • Hallo,

    also ich halte von solchen Kurzanleitungen nicht viel, da sie einer guten Einführung aus einem guten Buch qualitativ fast immer unterlegen sind.

    Hier mal ein paar kleine Punkte:

    1. geschachtelte Kommentare sind in C++ strenggenommen nicht erlaubt
    2. Der Präprozessor überliest die Kommentare nicht, er entfernt sie aus der Eingabe.
    3. #includes inkludieren keine Bibliotheken, sondern vielmehr Deklarationen. Bibliotheken sind für den Compiler uninteressant. Ausnahme sind Header-Only-Libs.
    4. Es ist nicht die "moderne C++ Syntax", die auf die Endung .h verzichtet.
    5. Das Beispiel für einen C-Header mit .h-Endung ist schlecht gewählt, da conio.h kein C-Header ist.
    6.

    Das
    int vor dem main gibt an, dass
    die Funktion einen Integerwert
    zurückgibt. Dies ermöglicht den
    Ausstieg aus einer Funktion und
    hier eben aus dem Hauptprogramm,
    zu verschiedenen Zeitpunkten.

    Der logische Schluss ist falsch. Wann man aus einer Funktion zurückkehrt ist unabhängig vom Rückgabetyp der Funktion.

    7. Wer system benutzt sollte <cstdlib> inkludieren.



  • 8. parameterlose Funktionen benötigen in C++ kein void innerhalb der Funktionsklammern



  • Nanana, solch ein edles Vorhaben und nur Kritik? Die Idee finde ich gut, keiner braucht noch mehr C++/WinAPI-Tutorial-Homepages und wenn man hier im Forum über solch einen Tutorial-Post stolpert, kann man u.U. noch etwas Neues entdecken. Wenn ich bedenke, wie viele Anfängerfragen hier oft gepostet werden (nicht negativ gemeint) ist so ein Beispiel doch sinnvoll!
    Sicherlich ist das Beispiel nicht perfekt, aber hab in Büchern schon schlimmeres gesehen. Wer außerdem ins Programmieren nur mal reinschnuppern will, kauft sich nicht gleich Bücher, die kosten nämlich Geld^^



  • @Erhard Henkes:

    Ähm...

    cmath <-> math.h

    😉



  • Ach ja noch zu meinem Kollegen Badestrand 😉 :

    Ich stimme dem eigentlich auch zu! Man sollte das aber nicht als Tutorial verkaufen, sondern eher als 'Kontrollcode'; Es gibt -ohne meinen Karibikfreund jetzt wiederholen zu wollen- 😃 ... nämlich so viele Anfängerfragen, die sich mit seinem Code geklärt hätten! Man sollte aber vielleicht (also wenn das in die FAQ kommen sollte, oder der Thread sticky gemacht wird) erwähnen, dass man besser mit nem 'richtigen' Buch anfangen soll, wenn man vor hat, richtig in die Materie einzusteigen.



  • 😃 Karibikfreund 😃



  • groovemaster schrieb:

    8. parameterlose Funktionen benötigen in C++ kein void innerhalb der Funktionsklammern

    Aber falsch oder gar schlechter Stil ist es doch auch nicht, oder irre ich mich da?



  • Aber falsch oder gar schlechter Stil ist es doch auch nicht, oder irre ich mich da?

    Reduziert auf den Code:

    #include <string>
    #include <iostream>
    using namespace std;
    
    int main (void)
    {
        string name = "DEIN_NAME";
        system("cls");
        cout << "Hallo " << name << "!\n";
        cout << "Ich bin dein erstes Proggy!!!\n\n";
        return 0;
    }
    

    void und return 0 sind überflüssig. Die Anweisung system(...) gehört m.E. nicht in ein Einstiegsprogramm. Das Problem mit dem "Aufblitzen" in MS Windows ist nicht adressiert.
    Solche Programme gibt es doch zuhauf.



  • Wieso sollte
    return 0;
    überflüssig sein, wenn als Rückgabetyp int angegeben ist?



  • Reyx schrieb:

    Wieso sollte
    return 0;
    überflüssig sein, wenn als Rückgabetyp int angegeben ist?

    Eben, dass wäre doch dann schlechter Programier-Stil



  • Also den Kommentar kann ich mir irgendwie nicht verkneifen:

    kompiler schrieb:

    Es ist offensichtlich, dass jeder abgeschlossene
    Befehl mit dem Strich-Punkt endet, unbedingt darauf
    achten, um dumme Fehler zu vermeiden.

    Das Dingelchen heißt Semikolon 😃 .



  • Hoho, ein Gebildeter



  • Das kann mans icher aber auch kaum verkneifen ^^



  • Reyx schrieb:

    Wieso sollte
    return 0;
    überflüssig sein, wenn als Rückgabetyp int angegeben ist?

    Weil der Standard es nun mal so festlegt. main ist die einzige Funktion mit einem Rückgabetyp != void, die gerne auch ohne ein explizites return verlassen werden darf.

    Badestrand schrieb:

    Reyx schrieb:

    Wieso sollte
    return 0;
    überflüssig sein, wenn als Rückgabetyp int angegeben ist?

    Eben, dass wäre doch dann schlechter Programier-Stil

    Wie gesagt, main ist eine Ausnahme. Insofern kann man getrost auf das return verzichten. Ob das nun sinnvoll ist oder nicht, sei mal dahin gestellt.



  • audacia schrieb:

    Aber falsch oder gar schlechter Stil ist es doch auch nicht, oder irre ich mich da?

    Falsch ist es nicht, da hast du absolut Recht. Und ob das schlechter Stil ist, darüber kann man sich sicherlich streiten. Aber leere Klammern drücken doch am besten aus, dass da nichts reinkommt. Wieso sollte man also void schreiben, wenn das überhaupt nicht notwendig ist? Vermutlich machen das einige Leute aus Gewohnheit zu C. In C++ ist es jedoch nicht unbedingt üblich.


Log in to reply