Warum programmiert ihr in C?



  • Du schreibst als unregistrierter Troll an einem Samstag Morgen so einen langen Bullshit Text. Du bist zu bedauern.



  • Experte666 schrieb:

    K.A. in wie weit meine Ausführungen jetzt für C++ - 'Experten' ohne Ahnung von der Arbeitsweise einer CPU obektiv oder überzeugend erscheinen mögen,

    Das weiß ich auch nicht.
    Aber für C++-Experten mit Ahnung von der Arbeitsweise der CPU erscheinen Deine Ausführungen nicht begründet.

    Zur Ansicht ein Monster-Objekt.

    struct S1{
       int a;
       int b;
    };
    struct S2{
       int c;
       int d;
    };
    struct S3{
       int e;
       int f;
    };
    struct S4{
       int g;
       int h;
    };
    struct S12{
       S1 s1;
       S2 s2;
    };
    struct S34{
       S3 s3;
       S4 s4;
    };
    struct S1234{
       S12 s13;
       S34 s34;
    };
    S1234 s1234;
    

    Glaubst Du wirklich, daß in s1234 die weit entfernten Elemente a-g völlig wild verteilt im Speicher liegen?

    Falls nicht, baue mal ein praxisrelevantes Objekt, das grottenlangsam ist, und das in C viel schneller wäre. Das wird dann erstens in C viel unpraktischer sein, und zweitens kann ich Dir zeigen, wie man es in C++ mindestens genauso schnell bekommt.



  • Volkard hat es schön beschrieben. In C++ muss man meist rumtricksen um auf die Geschwindigkeit von C zu kommen.

    Will man ohne C-Elemente wie Zeiger etc. mit C++ die Geschwindigkeit von C erreichen so ist dies fast nicht möglich. Ich kann es auch nicht oft genug betonen solange man kein C++ und OOP Experte ist wird das C++ Programm nie und nimmer an ein in C erstelltes Programm rankommen. Bei Anfängern ist mit Sicherheit auch mal ein Faktor 30 drinne in dem ein oder anderen Fall. Aber in der Regel biste du mit C++ nur halb so schnell unterwegs denn die wenigsten C++ Programmiere sind wirkliche Experten auf ihrem Gebiet. Es wird auch kaum noch neue Programmierer geben die C++ so gut lernen werden um damit an C ranzukommen.

    In der Praxis sind so gut wie immer die C Programme schneller und natürlich auch schlanker, ob das nun theoretisch anders geht ist uninteressant. Ein JIT-Compiler könnte auch schneller sein als ein statisches Kompilat, ist es aber in der Praxis auch nicht.

    Ich würde mal sagen 90% aller C++ler produzieren schöne Bloatware wo selbst die Javaraner sich das Lächeln nicht verkneifen können.

    Schöne WE noch und viel beim Rumquälen mit C++ *kicher



  • F18oder17 schrieb:

    Bei Anfängern ist mit Sicherheit auch mal ein Faktor 30 drinne in dem ein oder anderen Fall. Aber in der Regel biste du mit C++ nur halb so schnell unterwegs

    Unfug. Zeig ein Beispiel.



  • volkard schrieb:

    F18oder17 schrieb:

    Bei Anfängern ist mit Sicherheit auch mal ein Faktor 30 drinne in dem ein oder anderen Fall. Aber in der Regel biste du mit C++ nur halb so schnell unterwegs

    Unfug. Zeig ein Beispiel.

    char c[2]={'a'};
      c[1] = 'b';
    
    string c("a");
      c+="b";
    

    um sowas zu produzieren muß man aber schon verdammt schlecht programmieren...



  • muß natürlich c[3] sein... sollte erstmal richtig wach werden...



  • Das C++-Äquivalent wäre eher

    string s(2,'a');
    s[1] = 'b';
    

    Man bedenke aber, dass std::string das intern verwendete char-array dynamisch allokiert (ebenso wie vector, das Array liegt dann antürlich in C++ ebenso an einem Stück im Speicher!), um Vergrößerungen zuzulassen.
    Wenn man einen string konstanter Länge mit den üblichen Vorteilen (boundcheck, etc) gegenüber "nackten" Arrays braucht, kann man auf (z.B.) std::tr1::array<char, size> zurückgreifen.



  • Schaffner schrieb:

    Das C++-Äquivalent wäre eher

    string s(2,'a');
    s[1] = 'b';
    

    Man bedenke aber, dass std::string das intern verwendete char-array dynamisch allokiert (ebenso wie vector, das Array liegt dann antürlich in C++ ebenso an einem Stück im Speicher!), um Vergrößerungen zuzulassen.
    Wenn man einen string konstanter Länge mit den üblichen Vorteilen (boundcheck, etc) gegenüber "nackten" Arrays braucht, kann man auf (z.B.) std::tr1::array<char, size> zurückgreifen.

    übder die performance speicher dynamisch zu allokieren haben wir uns hier schon oft unterhalten, das will ich nicht wieder aufwärmen. wie ich schrieb würde ein guter c++ entwickler vermutlich etwas anderes verwenden. aber so wie es c'ler gibt die

    char *c = calloc(3,sizeof(char));
    c[0] = 'a';
    c[1] = 'b';
    

    verwenden (hier im forum schon öfter aufgetaucht...) nehmen c++'ler sicher auch (ist sicher auch schon im forum schon aufgetaucht...)

    string c("a");
    c+="b";
    

    ⚠ schlechter code lässt sich in jeder sprache schreiben ⚠



  • __-- schrieb:

    char c[2]={'a'};
      c[1] = 'b';
    
    string c("a");
      c+="b";
    

    Naja, falls es so einen schlechten C++-Anfänger gibt, dann müssen wir ihm auch einen schlechen C-Anfänger entgegenhalten, gell?

    char c[2]="a";
      strcat(c,"b");
    


  • hehe schrieb:

    muß natürlich c[3] sein... sollte erstmal richtig wach werden...

    Manche (ich nicht) nehmen gerne C++, weil ihnen in C++ sowas nicht passiert. 🤡


Anmelden zum Antworten