cout und printf...



  • Hallo,

    bin ein absoluter neuling in der Sache C++. Vorher hatte ich mit Visual Basic programmiert.

    Bin immer auf der Suche nach Tutorials im Netz. Warum finde ich die meisten Tutorial Beispiele mit dem Befehl cout anstatt mit dem Befehl printf?

    Worin liegt der Unterschied zwischen cout und printf?

    Welcher befehl ist neuer, oder kann man das nicht sagen?

    Sollte ich mich lieber mit den cout Tutorials anfangen?

    Gruss,
    Cyrill



  • in C benutzt man printf
    in C++ benutzt man cout

    also benutze cout.



  • "cout / printf": Beides hat seine Vorteile und wird verwendet. Daher würde ich mir beide Sprachen, C und C++, in ihrem grundsätzlichen Aufbau anschauen. Hier zwei gute Tutorials:

    C:
    http://www.strath.ac.uk/IT/Docs/Ccourse/

    #include <stdio.h>
    main()
    {
            printf("This is a C program\n");
    }
    

    C++:
    http://home.arcor.de/cpp_kurs/cpp/hinweis.htm(moderner Stil)

    Dies ist alter und heute(!) falscher Stil:
    http://online-media.uni-marburg.de/informatik/cpp/ (halt Uni 😉 )

    #include <iostream.h>             // Hier werden zusätzliche Befehle eingebunden 
    void main()                       // Das ist das Hauptprogramm 
    {                                 // Hier fängt ein Anweisungsblock an 
        cout << "Hallo Welt!" << endl;  // Hier wird etwas ausgegeben 
    }                                 // Hier hört der Anweisungsblock auf
    

    Zur Zeit(!) richtig:

    #include <iostream>
    int main()
    {                                  
        std::cout << "Hallo Welt!" << std::endl;   
    }
    

    Gute Tutorials legen Wert auf Templates, STL, namespaces, const-correctness, Konzepte, Policies, ...



  • hi

    ich weiß nicht mehr genau, von wem ich mir das kopiert hatte, aber es ist ein guter überblick, finde ich:

    printf ("\nhello world");
        /* 
          der Befehl printf wird oft noch verwendet für die Standart ein und ausgabe.
          Problem 1: der Compiler findet Fehler nicht wie: printf("gebe den Wert %d &s %x \n", 55, "aus in Hexa: " ,55);
          (das falsche Kaufmanns-und statt einem Prozentzeichen vor dem string s ).
          Problem 2: da der Steuerstring (Variante mit angehaengten Werten) zur Laufzeit ausgewertet 
          wird, kostet das Zeit, guenstiger waere es, zur Übersetzungszeit festzustellen, wenn ein Wert
          ausgegeben werden soll.
          Problem 3: da erst zur Laufzeit entschieden wird, wie ein Parameter ausgegeben wird, muß printf 
          vorsorglich alle moeglicherweise notwendigen Konvertierungsroutinen mit einbinden.(erst zur Laufzeit
          wird ja bei: printf("gebe den Wert %d %s %x \n", 55, "aus in Hexa: " ,55); klar, daß int in Hex
          auzugeben ist. Die printf-Funktion ist daher zusammen mit den ganzen Konvertierungen recht groß.
        */
    
        cout <<"\nhello world";
        /*
            fuer ein und ausgabe wurden in C++ eigene Klassen definiert. Eingabe istream, Ausgabe ostream
            =iostream.Mit diesen Klassen werden automatisch drei Objekte angelegt, die die Aufgaben der 
            bisherigen Kanaele uebernehmen. (cout für stdout, cin für stdin, cerr für stderr). In den Klassen
            sind eine Vielzahl von Operatorfunktione definiert, die die Symbole "<<" und ">>" überlagern.
            Die Ausgabe ruft mit Hilfe des Symbols "<<" eine Methode der Klasse "cout". Diese Methode fuehrt
            dann die eigendliche Ausgabe durch.
            Die Probleme von printf sind damit überwunden, da der Compiler zur Uebersetzungszeit ermittelt,
            welche Ausgaben gewuenscht werden. Tippfehler werden erkannt. Es braucht keine Interpretation eines
            Steuerstrings. Der Compiler wählt zur Übersetzungszeit aus der menge der überladenen Operatorfunktionen
            anhand des Typs des Parameters die benötigte Funktion aus. Damit werden nur die wirklich
            verwendeten Ausgabe und Konvertierungsroutinen spaeter eingebunden.
            */
    


  • Erhard Henkes schrieb:

    Dies ist alter und heute(!) falscher Stil:
    http://online-media.uni-marburg.de/informatik/cpp/ (halt Uni 😉 )

    #include <iostream.h>             // Hier werden zusätzliche Befehle eingebunden 
    void main()                       // Das ist das Hauptprogramm 
    {                                 // Hier fängt ein Anweisungsblock an 
        cout << "Hallo Welt!" << endl;  // Hier wird etwas ausgegeben 
    }                                 // Hier hört der Anweisungsblock auf
    

    Das ist nicht heute(!) falscher Stil, das war vielmehr schon immer falsch. void main gab es auch in der Steinzeit nicht. Als falschen Stil würde ich vielleicht die unglücklichen Kommentare bezeichnen.

    Macht man aus dem void main ein int main, dann wird daraus schlicht und einfach Prä-Standard-C++. Ob das nun falsch oder richtig ist, liegt an der konkreten Situation. Schließlich ist <iostream.h> nach wie vor portabler als <iostream>. Trotzdem würde ich erstmal auf jeden Fall zu Standard-C++ (hier also <iostream>) raten.



  • HumeSikkins hat bezüglich "void main()" Recht (siehe auch bei Herb Sutter, Exceptional C++). Ich wollte dies als abschreckendes Beispiel für "grausamen Code" posten. Dieses Tutorial steht aber heute noch im Netz, gehört also zur aktuellen C++-Geschichte. Diesen ganzen Mist muss ein Einsteiger erstmal auseinander halten können.

    Daher sollte man sich gerade als Einsteiger auch mit der Geschichte von C und C++ beschäftigen, um dann zielorientiert ISO-Standard-C++ (Jahrgang 1998) zu lernen. Das Buch von Marc++us und Herb Sutter's "Exceptional C++" sind zwei gute Wegbegleiter für C++.



  • Aber insbesondere das zweite ist nichts für Einsteiger.


Anmelden zum Antworten