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.