Warum programmiert ihr in C?



  • Die Seite hier ist irgendwie wie ein Museumsbesuch.

    lieber ein schneller oldie als ein langsamer neuwagen 😉



  • volkard schrieb:

    Eigentlich hatte ich eine Widerlegung meiner Aussage auf Seite 24 erwarte, wo ich schrieb, warum sowohl Anfänger- als auch Profi-Code in C++ die Tendenz hat, schneller als gleichwertiger Code in C zu sein.

    Scheint auch weniger C Programmierer zu geben die ihre Sprache vollständig begriffen haben, wenn du weist was ich meine. Code ist nicht gleich Code.



  • Ist euch eigentlich schon einmal aufgefallen, dass einige C-Schreiber gar keine Menschen sind? Ich habe mit C überwiegend deshalb zu tun, weil es eine halbwegs brauchbare Zielsprache für Compiler ist. Also komme ich regelmässig hier vorbei, um in meiner Zielsprache fit zu bleiben. Warum muss ich nun aber im C-Forum seitenlange Diskussionen über C++ ignorieren?



  • Könnt froh sein das es C gibt, wer weis was aus euren OS'es geworden wäre.

    Dann waere es 'ne andere Sprache wie Lisp: http://linuxfinances.info/info/lisposes.html . Hier mal etwas experimentelles in C++: http://sourceforge.net/projects/ekp/ .

    Ich finde einfach mann sollte sich mehr Respekt entgegen bringen, vorallem wenn man keine richtigen Argumente zum mehr Thema hat !

    Verstehe ich nicht. 🙂

    Doch es kommt wie geschrieben immer auf alles an

    Dann muss man ueber alles reden. Leider kann man das nicht. Also muss man schweigen!

    Warum muss ich nun aber im C-Forum seitenlange Diskussionen über C++ ignorieren?

    Ich gehe ins Internet, warum muss ich den ganzen Kontent ignorieren, der mich nicht interessiert? Was ist denn das fuer eine bescheuerte Frage?



  • @volkart

    Aber ich denke auch das überwiegend in C++ den schneller Code geschrieben wird!
    Da bin ich mit dir völlig einig. Denn das gebastell unter C ist von manchen einfach eine Tragödie.



  • -lowbyte- schrieb:

    @volkart

    Aber ich denke auch das überwiegend in C++ den schneller Code geschrieben wird!
    Da bin ich mit dir völlig einig. Denn das gebastell unter C ist von manchen einfach eine Tragödie.

    Das nennst Du "denken" ? Ich würde das ein Armutszeugnis nennen, geprägt von
    intellektueller Schlichtheit ... Vielleicht nennst Du Dich auch noch "Programmierer",
    ich hoffe nur, Deine Kenntnisse sind besser wie Dein Deutsch.



  • knivil schrieb:

    Ich gehe ins Internet, warum muss ich den ganzen Kontent ignorieren, der mich nicht interessiert? Was ist denn das fuer eine bescheuerte Frage?

    Ist nicht bescheuert. Die ewig gleichen, unfreundlichen, kaum konkret untermauerten C vs. C++-Flamewars sind hier schlicht offtopic. Es wäre mir sehr recht, wenn sie hier nicht mehr auftreten würden. Aber vielleicht liegt das an mir, und ich bin einfach nicht in der Lage, mit dem Geist der Zeit Schritt zu halten.



  • Wir hatten schon lange keinen so langen Thread C vs. C++. Fuer gewoehnlich sind sie im C++ Bereich zu finden. Und nicht nur das, allein die Qualitaet der Beitraege sucht seines Gleichen.



  • Ich finde einfach mann sollte sich mehr Respekt entgegen bringen, vorallem wenn man keine richtigen Argumente zum mehr Thema hat !

    Nö, dann sollte man den Mund halten.

    knivil schrieb:

    Wir hatten schon lange keinen so langen Thread C vs. C++. Fuer gewoehnlich sind sie im C++ Bereich zu finden. Und nicht nur das, allein die Qualitaet der Beitraege sucht seines Gleichen.

    Warum immer C gegen C++? Weil beide ein C im Namen haben? C ist ein sehr einfaches Werkzeug, das nur die allernötigsten Mittel anbietet um halbwegs strukturierte Programme zu schreiben. C++ ist eine umfangreiche Hochsprache, und tritt deshalb viel eher mit Java & Co in Konkurenz. Die Fälle, in denen sich ein verständiger Mensch ernsthaft zwischen C und C++ entscheiden muss, sind wohl sehr selten.



  • __-- schrieb:

    volkard schrieb:

    Eigentlich hatte ich eine Widerlegung meiner Aussage auf Seite 24 erwarte, wo ich schrieb, warum sowohl Anfänger- als auch Profi-Code in C++ die Tendenz hat, schneller als gleichwertiger Code in C zu sein.

    also ich denke wir können uns darauf einigen, dass man in c mehr aufwand betreiben muß um auf die gleiche performance zu kommen.

    Nein.
    Ich meine da eine relativ neue Entwicklung, nämlich "zero cost" exception handling.
    http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gnat_ugn_unw/Exception-Handling-Control.html

    there is no overhead for exception handlers if no exception is raised

    Recht neue Technik das, daher noch nicht in die C-Gemeinde allgemein durchgedrungen, fürchte ich.
    In beiden Sprachen muß man die Rückgabe von malloc, fopen und so immer mit if noch überprüfen. In C++ wirft man eine Exception, in C returnt man.
    Aber in C müssen alle Funktionen auf allen Ebenen mit if ihre Kinder überprüfen. Das muß man in C++ nicht, an passender Stelle steht beliebig viele Ebenen häher ein passendes catch. Effekt: viele ifs gespart und ersetzt durch gar nichts.
    Also wird C++-Code von einem Programmierer, der auch in C zuhause ist, und nicht auf std::string und cout angewiesen ist, vermutlich schneller werden als gleichwertiger C-Code.



  • Natürlich ist C++ langsamer und Aufwendiger als C.

    C:

    #include <stdio.h>
    
    int main(int argc, char *argv[])
    {
       printf("C rulez!!!!!!!");
       return 0;
    }
    

    C++:

    #include <iostream>
    #include <string>
    #include <ctime>

    class Hello
    {
    public:
    Hello(const std::string&);
    void print();

    private:
    std::string str;
    void doSomethingUseless();
    };

    Hello::Hello(const std::string &str) : str(str)
    {
    }

    void Hello::print()
    {
    int i;
    for(i = 0; i < str.length(); i++)
    {
    doSomethingUseless();
    std::cout << str[i];
    }
    }

    void Hello::doSomethingUseless()
    {
    time_t now;
    time(&now);

    while( time(NULL) <= (now + 10));

    }

    int main(int argc, char *argv[])
    {
    Hello *h;
    h = new Hello("C++ sucks\nEcht lahm das ganze");
    h->print();
    delete h;
    return 0;
    }

    😮



  • knivil schrieb:

    Wir hatten schon lange keinen so langen Thread C vs. C++. Fuer gewoehnlich sind sie im C++ Bereich zu finden. Und nicht nur das, allein die Qualitaet der Beitraege sucht seines Gleichen.

    Sind die Mods alle im Urlaub? Oder stehen die einfach auf Threads mit einer Trolldichte jenseits von Gut und Böse?

    Scheppertreiber schrieb:

    ich hoffe nur, Deine Kenntnisse sind besser wie Dein Deutsch.

    Welch Ironie. 😃



  • this->that schrieb:

    knivil schrieb:

    Wir hatten schon lange keinen so langen Thread C vs. C++. Fuer gewoehnlich sind sie im C++ Bereich zu finden. Und nicht nur das, allein die Qualitaet der Beitraege sucht seines Gleichen.

    Sind die Mods alle im Urlaub? Oder stehen die einfach auf Threads mit einer Trolldichte jenseits von Gut und Böse?

    Scheppertreiber schrieb:

    ich hoffe nur, Deine Kenntnisse sind besser wie Dein Deutsch.

    Welch Ironie. 😃

    Der Gameboy wieder ... 😃



  • Möchtest du nicht noch dein Password preisgeben?



  • [quote="volkard]
    Aber in C müssen alle Funktionen auf allen Ebenen mit if ihre Kinder überprüfen.[/quote]
    Und genau das ist der grundlegende Irrtum. Muss man nämlich nicht. Und das hat auch nichts mit unsauberem Programmierstil zu tun. Wenn z.B. Josef so eine geniale Funktion erfindet, wie diese hier:

    void TranslateMessage(char** Buffer){
    /* ... */
    

    und dabei Hans die (mündliche) Zusage gibt, dass TranslateMessage garantiert funktioniert, wenn Buffer nicht NULL und mindestens BUFSIZE groß ist, dann braucht die Funktion von Josef nicht noch extra

    if(Buffer)
     /* ... */
    

    abfragen, wenn ihm Hans garantiert, niemals NULL reinzustecken.
    Ein uneingeweihter Dritter (DAU) kann dann zwar immer noch NULL reinstecken.
    Aber was, wenn gar nicht vorgesehen ist, dass je jemand anderer als der zuverlässige Hans die Funktion benutzen wird? -> Ergo: Überflüssige Doppelt- und Dreifachprüfung eingespart Kein Compiler der Welt könnte eine derartig überflüssige Doppele Überprüfung wegoptimieren, weil er von Josef's und Hans mündlicher Vereinbarung nichts weiß.
    Aber was meinst Du, müsste wohl eine (hypothetische) DAU-sichere std::string::TranslateMessage(char** Buffer) Funktion tun?
    Es bliebe ihr nicht erspart, dem ahnungslosen Aufrufer zuzutrauen, dass er eine NULL reinsteckt, und müsste dementsprechend die if() Abfrage, auf die das C-Team Josef + Hans verzichten konnte, implementieren. Oder man musste einen Exception-Handler für diesen Fall installieren (==Parallel-Thread) mit gigantischem Kontext-Wechsel Overhead (der momentane Zustand der Register muss zwischengespeichert werden, der Exception-Handler wird in die CPU geladen, nach Beendigung seiner Arbeit kann man nur noch abort() oder exit() aufrufen, da zu dem Zeitpunkt, als die Exception auftrat, der Stack in einem gänzlich zufälligen Zustand war, und es wird wohl auch die Freigabe von System-Handles oft genug zum Problem. Man kann gar nicht mehr genau eingrenzen, woher der Fehler überhaupt kam, und ein Ent-Buggen der Anwendung wird dementsprechend erschwert (idR unmöglich). Ganz zu schweigen von garantierten Deadlocks in Multi-Thread Anwendungen, die man sich mit Exceptions einbrockt.
    Also, derartige (mündliche) Optimierungsmöglichkeiten wie in C hat man mit C++ gar nicht. Dort werden einem Exceptions & Co. jedenfalls von der Runtime aufgezwungen, ob man will oder nicht.
    mfg



  • C++ ist eine übermüllte scheisse ... bei dem man mehr Abstraktion und Sicherheit gewinnen wollte und doch nichts erreichte hat, was der C Programmierer schon gar nicht braucht! Ihr C++' er kommt immer mit Argumenten die einfach nicht überzeugen!
    Und das letzte Argument von Volkard ist gar nicht nennenswert.



  • Ausnahmekoenner schrieb:

    ... Aber was meinst Du, müsste wohl eine (hypothetische) DAU-sichere std::string::TranslateMessage(char** Buffer) Funktion tun? ..

    Meinst du das ernst?
    Du vergleichst also die sichere C++ Variante mit der unsicheren C Variante?
    Oder gehst du davon aus, dass C++'ler so degeneriert sind, dass sie nicht miteinander kommunizieren können und deshalb die erste Variante nicht in Frage kommt?



  • Sie ist nur so unsicher wie der Programmierer der schreibt!



  • knivil schrieb:

    Wir hatten schon lange keinen so langen Thread C vs. C++. Fuer gewoehnlich sind sie im C++ Bereich zu finden. Und nicht nur das, allein die Qualitaet der Beitraege sucht seines Gleichen.

    siehste, hat c mehr Kante als c++ bzw. c-- 😃



  • Ausnahmekoenner schrieb:

    volkard schrieb:

    Aber in C müssen alle Funktionen auf allen Ebenen mit if ihre Kinder überprüfen.

    Und genau das ist der grundlegende Irrtum. Muss man nämlich nicht. Und das hat auch nichts mit unsauberem Programmierstil zu tun. Wenn z.B. Josef so eine geniale Funktion erfindet, wie diese hier:

    void TranslateMessage(char** Buffer){
    /* ... */
    

    und dabei Hans die (mündliche) Zusage gibt, dass TranslateMessage garantiert funktioniert, wenn Buffer nicht NULL und mindestens BUFSIZE groß ist

    Das ist klar.
    Aber sauviele Funktionen werden am Ende abgefragt werden müssen, weil innendrin oder in deren Kinder doch irgendwo syscalls lauern. Hast Du schonmal versucht, die *notwenignen* ifs alle einzubauen, statt sie wie üblich schlicht zu ignorieren?

    Ich rede nicht von unsinnigen Tests. Die sinnigen Tests. Die Notwendigen. Die, die schiefgehen können, weil eine Datei verschwunden ist, ein Puffer nicht allokiert werden konnte, ein Thread nicht erstellt werden konnte, eine Schriftart nicht geladen werden konnte und so weiter...

    Und von den sinnigen Tests gibt es noch ausreichend viele. Und die haben wir in C++ zu Nullkosten, aber in C muß man dafür zahlen. Also kann man in C++ schnelleren Code bauen als in C.


Anmelden zum Antworten