Was heißt das c bei cout?



  • Bashar schrieb:

    Ich weiß. Trotzdem halte ich es für einen Troll.

    Immer noch besser als ein ignoranter Besserwisser 🙄



  • wenn schon kin und kaus 😉



  • sorbon schrieb:

    Weiß das jemand?

    Ich übersetzte gerade C++ auf deutsch

    warum??? 😕

    sorbon schrieb:

    #define KONSOLE_RAUS std::cout

    das hat doch keinen vorteil... es wird nur kompilierzeit verschwendet. am ende hast du dann 5000 defines. wozu???



  • wen mit #define dan kürtzer stad längere wörter oder?

    aber es ist doch kurtz genug.



  • in c++ verwendet man sowieso kein #define mehr. das ist c.



  • Pendragon schrieb:

    in c++ verwendet man sowieso kein #define mehr. das ist c.

    woher hast du denn das auf einmal?



  • Pendragon schrieb:

    in c++ verwendet man sowieso kein #define mehr. das ist c.

    echt? Dachte immer das wäre ein Bestandteil des Präprozessors 😮



  • SirLant schrieb:

    Pendragon schrieb:

    in c++ verwendet man sowieso kein #define mehr. das ist c.

    echt? Dachte immer das wäre ein Bestandteil des Präprozessors 😮

    dachte ich auch da ja alle befäle die mit # anfangen sind Präprozessors befäle.



  • ist ja auch für den präprozessor. define wurde aber nur übernommen, um mit c kopatibel zu bleiben. (genau wie der restliche mist...) in c++ wurde const eingeführt, da man hier konkrete typen definieren musste. was auch sinnvoll ist, da man dann nicht so leicht bufferoverflows o.ä. durch falsches typenhandling verursacht.



  • TaccoGo schrieb:

    wen mit #define dan kürtzer stad längere wörter oder?

    aber es ist doch kurtz genug.

    Lern Deutsch



  • Das wäre, aber unschön so hätte man ja unnötig speicher verschwendet, für Objekte die wie möglicherweise nie brauchen.



  • SirLant schrieb:

    Das wäre, aber unschön so hätte man ja unnötig speicher verschwendet, für Objekte die wie möglicherweise nie brauchen.

    Auf welche Aussage bezieht sich das? Hoffentlich nicht auf die vorletzte, oder?

    Pendragon schrieb:

    ist ja auch für den präprozessor. define wurde aber nur übernommen, um mit c kopatibel zu bleiben. (genau wie der restliche mist...) in c++ wurde const eingeführt, da man hier konkrete typen definieren musste. was auch sinnvoll ist, da man dann nicht so leicht bufferoverflows o.ä. durch falsches typenhandling verursacht.

    Du solltest dich von der Vorstellung lösen, dass man #define nur für die Definition von Konstanten benutzen kann.



  • Naja, außer für include-guards fällt mir jetzt nicht mehr besonders viel sinnvolles speziell zum Einsatz von #define ein.
    Disclaimer: Ich rede nicht vom Präprozessor im Allgemeinen, sondern speziell von #define.

    Auf welche Aussage bezieht sich das? Hoffentlich nicht auf die vorletzte, oder?

    Würde mich jetzt auch interessieren.



  • Pendragon schrieb:

    define wurde aber nur übernommen, um mit c kopatibel zu bleiben.

    öhm...nein?
    dann mach das mal ohne präprozessor:

    #include <iostream>
    #define COUT_VAR(argument) std::cout << #argument <<" hat den Wert "<<argument<<std::endl
    int main(){
    int i=5;
    int hallo=10;
    COUT_VAR(i);
    COUT_VAR(hallo);
    }
    

    ausgabe:
    i hat den Wert 5
    hallo hat den Wert 10



  • Optimizer schrieb:

    Naja, außer für include-guards fällt mir jetzt nicht mehr besonders viel sinnvolles speziell zum Einsatz von #define ein.

    Es gibt auch nicht sooo viel, aber es gibt Situationen in denen es ganz nützlich ist. Meist sind es aber nur Sachen, die man zu Debuggingzwecken einbaut.



  • SirLant schrieb:

    Das wäre, aber unschön so hätte man ja unnötig speicher verschwendet, für Objekte die wie möglicherweise nie brauchen.

    man deklariert keine objekte, die man nicht braucht...

    MaSTaH schrieb:

    Du solltest dich von der Vorstellung lösen, dass man #define nur für die Definition von Konstanten benutzen kann.

    in diesem thread geht es aber darum... 😉 schau dir den oben geposteten code einmal an und sage mir, was dort keine konstanten sind...

    otze schrieb:

    öhm...nein?
    dann mach das mal ohne präprozessor:

    C/C++ Code:
    #include <iostream>
    #define COUT_VAR(argument) std::cout << #argument <<" hat den Wert"<<argument<<std::endl
    int main(){
    int i=5;
    int hallo=10;
    COUT_VAR(i);
    COUT_VAR(hallo);
    }
    ausgabe:
    i hat den Wert 5
    hallo hat den Wert 10

    #include 
    void output(int zahl)
    {
    cout << zahl;
    cout << endl;
    }
    
    int main(){
    int i=5;
    int hallo=10;
    output(i);
    output(hallo);
    }
    


  • pendragon, lies nochmal meinen code durch.

    das sit die ausgabe meines programms:

    Programm schrieb:

    i hat den Wert 5
    hallo hat den Wert 10



  • #include <iostream.h> 
    void output(char* name, int zahl)
    {
    cout << name << "hat den wert " << zahl;
    cout << endl;
    }
    
    int main(){
    int i=5;
    int hallo=10;
    output("i", i);
    output("hallo", hallo);
    }
    

    macht das gleiche. ich habe nur keine lust über so einen code zu streiten. mit sicherheit kann man das eleganter lösen...



  • nein, sicher nicht, der präprozessor ist darin unschlagbar.

    nächstes beispiel(als erweiterung des letzten):
    erweitern wir das letzte define einfach mal:

    #define COUT_VAR(argument) std::cout <<"in Datei "<<__FILE__<<" in Zeile "\
    <<__LINE__<<" :"<< #argument <<" hat den Wert "<<argument<<std::endl
    

    die neue ausgabe:

    Programm schrieb schrieb:

    In Datei test.cpp in Zeile 7 :i hat den Wert 5
    In Datei test.cpp in Zeile 8 :hallo hat den Wert 10

    1. da kommst du fast nicht mehr hinterher, der schreibaufwand ohne define ist einfach zu groß.
    2. ein COUT_VAR(i); ist übersichtlicher als ein Output("test.cpp",7,"i",i);
    3. die möglichkeit des präprozessors, code in einer librarie, im falle dass er vom entsprechenden compiler nicht unterstützt wird, einfach auszuklammern und durch eine funktionierende alternative zu ersetzen, ohne dass der benutzer eine zeile code ändern muss, macht ihn unschlagbar

    #ifdef __COMPILER_A__
    class test{...};//klasse für __COMPILER_A__
    #else
    class test{};//klasse für alle anderen compiler
    #endif
    


  • WOW, ich bin begeistert!! 👍

    Aber mal im Ernst: Das ist schon eine interessante Flexibilität. Will ich auch gar nicht abstreiten. Wunderbar.
    Aber wozu gibt es Debugger? Wer debuggt denn ernsthaft mit Ausgaben à la "Der Wert von x ist: 5" ?


Anmelden zum Antworten