Grundlegendes Verständnis



  • Hallo zusammen,
    als Elektriker kenne ich mich zwar in Simatic S7 Programmen ganz gut aus, hab vor rund 30 Jahren auch schon in BASIC Programme geschrieben, aber jetzt soll es c++ werden.....
    Ich hab mir mal dev c++ runtergeladen.

    Gehen wir mal von dem berümten Beispiel aus:

    #include <iostream>

    using namespace std;

    int main()
    {
    cout << "Hallo Welt" << endl;
    system("pause");
    }

    Fangen wir mit der ersten Zeile an:

    #include <iostream>
    dazu hab ich mehrfach im Netz gelesen das ich das erst später verstehen muss. O.K. kann ich mit leben.

    using namespace std;
    Im Wikipedia steht das ich mir das wie eine Vorwahl für eine Telefonnummer vorstellen soll. "std" steht für Standard (wie 040 für Hamburg steht). Verstanden. Aber was ist wenn ich im späteren Programm noch eine Weitere Namespace (030 für Berlin) verwenden will? Muss ich dann vor jedem Befehl sagen aus welcher Namespace der Befehl kommen soll?
    In dieser Namespace "std" stehen u.a. die Befehle cout, endl und System drin. Ist das richtig?
    Ich hab mal mit dem Dateimanager den Ordner DEV-cpp durchsucht. Hatte die Hoffnung einen Ordner "std" zu finden wo die Dateien cout, endl und System drin stehen. Leider nicht. Wie kann ich mir das sonst vorstellen?

    cout << "Hallo Welt" << endl;
    Ich übergebe die Zeichenkette "Hallo Welt" an den Befehl cout. Der kümmert sich darum das das auf dem Bildschirm angezeigt wird.
    Danach gebe ich den Befehl endl an cout weiter. cout macht dadurch den Zeilenumbruch. Richtig?

    system("pause");
    Hmmm.... system verstehe ich als Befehl. Dem übergebe ich die Zeichenkette "Pause"? Hatte das jedenfalls so verstanden das nur Zeichenketten, also Texte für Menschen, in Anführungszeichen stehen. Und "Pause" hört sich ziemlich deutsch an. Ich denke das solche Sachen eher in englisch geschrieben sind, oder?

    Ich würde mich freuen wenn Ihr nicht allzu laut über meine Fragen lacht. 😉

    Danke für Eure Hilfe,

    Gruss,

    Achim


  • Mod



  • Achim Meyer schrieb:

    als Elektriker kenne ich mich zwar in Simatic S7 Programmen ganz gut aus, hab vor rund 30 Jahren auch schon in BASIC Programme geschrieben, aber jetzt soll es c++ werden.....
    Ich hab mir mal dev c++ runtergeladen.

    Interessant. Mein Verlauf sieht recht ähnlich aus. Nur war ich vor 30 Jahren noch nicht mal in Planung 😉

    Zu den Code-Fragen: Die sind tatsächlich so grundlegend, dass du wirklich etwas Literatur dazu beschaffen solltest. Mir persönlich hat das geholfen: https://www.youtube.com/watch?v=nFM0SuPSxnc&list=PLfthkO_8dYCqARBKnZQm6Ck614Td9Vmz7 (C++ von { bis }). Allerdings hatte ich schon einige Grundkenntnisse zu C++.

    #include <iostream>
    
    using namespace std;
    
    int main()
    {
    cout << "Hallo Welt" << endl;
    system("pause");
    }
    

    den Code versuche ich die mal aufzubohren, wofür was da ist.

    #include <iostream>
    

    Der Header iostream ermöglicht dir unter anderem die Ein- und Ausgaben via cin und cout. Grundsätzlich (benonders als Anfänger) solltest du ungefähr wissen, was eine Codezeile oder ein Header bewirkt. Ansonsten neigst du eventuell unnötige Header immer zu inkludieren, weil irgendwo mal stand, dass man es brauchen könnte.

    using namespace std;
    

    Normalerweise sollte man soetwas nicht verwenden, es sei denn man weiß was man tut. Dieses findet man oft in Hello-World-Programmen, da sie den Code vereifachen. Einige Funktionen sind in C++ gewisserweise gruppiert. Du kannst es dir wie Dateien in verschiedenen Ordnern vorstellen. So kann man z.B. Funktionen nutzen, die den selben Funktionsnamen haben (wenn diese in verschiedenen Namespaces sind) und Funktionen nach Aufgabenbereichen sortieren.

    Durch 'using namespace std' können Funktionen die darin enthalten sind ohne die explizite Verwendung des namespaces verwendet werden:

    cout << "Hallo Welt" << endl;
    

    ohne 'using namespace std' müsstest du es so schreiben:

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

    - 'std::cout' bedeutet, dass du eine Konsolenausgabe tätigen willst
    - "Hallo Welt" ist der Text. Können auch mehrere Texte oder Variablen sein (z.b. cout << "die Variable 'var' mit dem Wert: " << var << " ist richtig!" << endl;)
    - 'std::endl' fügt einen Zeilenumbruch hinzu (geht auch mit "\n")

    system("pause");
    

    Ist ein API-Befehl, der nur unter MS Windows funktioniert. Es ist das selbe, wenn in der Windows-CMD 'pause' eingibst. Das Ergebnis: 'Drücken Sie eine beliebige Taste . . .' und die Konsole wartet so lange. Dies soll nur dazu sein, dass deine Konsole nach der Ausgabe von "Hello World" nicht sofort zugeht. Von der Verwendung von 'system(...)' würde ich aber eher abraten.

    was ich noch sehe: In code fehlt das 'return 0;' in der main()-Funktion. So müsste es sein:

    #include <iostream>
    
    using namespace std;
    
    int main()
    {
    cout << "Hallo Welt" << endl;
    system("pause");
    return 0;
    }
    

    viele Grüße,
    SBond



  • return darf in der Funktion main, und nur dort, weggelassen werden. std::endl fügt nicht nur einen Zeilenumbruch an, sondern flusht auch noch den stream, sodass alles, was in seinem cache steht, ausgegeben wird. Kann gemacht werden, muss aber nicht, es sollte durch die manuelle Ausgabe eines Zeilenumbruchs ersetzt werden.


Anmelden zum Antworten