C schneller als C++ ?



  • C ist direkter, in C gibt es viele strenge Konventionen die einem mehr Kontrolle über das Geschehen lassen. C++ gibt dem Programmierer viele Freiheiten und dazu das OOP-Modell, in C hat man diese Freiheiten nicht und auhc kein OOP-Modell. Dafür hat man ein System, was das ganze nicht über Dinge wie vtables umleitet und von alleine Konstruktoren/Destruktoren aufruft, sondern ein System was das ganze geschehen recht direkt auf die dunterliegende Assemblerschicht abbilden kann. Wer unvorsichtig ist, kann in Assembler, wie in C, wie auch in C++ und in jeder anderen Sprache Mist bauen. C hat nur im Gegensatz zu C++ weniger versteckte Dinge, das ist imho die Logik dahinter.

    PS: Ich finde es durchaus logisch, an Java mehr als nur die API zu mögen.



  • ohne den kompletten thread zu lesen, antworte ich mit: ja!



  • Gibt es auch einen vernünftigen benchmark, der verschiedene c und c++ compiler vergleicht?



  • das ist ja direkt lästig hier.

    mal zur feststellung: ich bin im selben kompetenz-team wie MrN und ich muß ihm höchstens einmal am Tag widersprechen. und dann nur zu ganz abgedrehnten sachen. bei so normalen sachen wie hier, da hat er recht.

    hiermit erkläre ich: falls ich mir einen glaubwürdigen namen bisher aufgebaut habe, dann vertraut MrN wenigstens ein bißchen so wie mir. vertraut ihm soweit, als würde ich ihm im forum hier weniger als einmale pro woche widersprechen (ka, wann ich ihm im forum zum letzten mal widersrpach, so selten ist das!).

    naja, einen kleinen unterschied soll es noch geben. MrN muß netter sein. wenn ich so ne oberscheiße lese wie
    "C ist direkter, in C gibt es viele strenge Konventionen die einem mehr Kontrolle über das Geschehen lassen. C++ gibt dem Programmierer viele Freiheiten und dazu das OOP-Modell, in C hat man diese Freiheiten nicht und auhc kein OOP-Modell"
    , dann beschimpfe ich den autor (ja, autor schreibt man ohne h) erstmal als inkopententen depp (ohne -en, damit ihr es besser verstehen tut). und dann erst sage ich, er solle meine postings in diesem thread erstmal lesen. das darf MrN noch nicht, aber ich habe gute lust, ihn zu meinem hofbeleidiger zu ernennen.
    bitte wendet zu euren gunsten diese, der härtsesten, maßnahme ab, indem ihr MrNs und meine postings lest, bevot ihr mist antwortet.

    [ Dieser Beitrag wurde am 24.05.2003 um 08:54 Uhr von volkard editiert. ]



  • Original erstellt von Daniel E.:
    Was glaubst Du wohl, warum C im sicherheitskritischen Sektor für sicherer als C++ eingestuft wird? Weil alle viel blöder sind als Du, klar.

    In Lebens-Wichtigen Sektor hat selbst C nix verloren, Daniel E, aber das ist ein anderes Thema.

    C ist kaum sicherer als C++. Das Problem bei C++ ist, dass viel zu viele C-Programmierer hingehen und C++ mit C mischen (zum Beispiel die ehlenden C-Casts in C++ Programmen die nun wirklich NICHTS da verloren haben!). DAS macht das Ganze erst unsicher und hier müsste man auch erst ansetzen. Aber leider gibt es viel zu viele "neumodischer quatsch... brauchte es bisher auch net, das geht auch anders"-Leute welche der Meinung sind, nur weil sie etwas nicht brauchen, brauchts die Welt nicht.

    -junix



  • Original erstellt von junix:
    In Lebens-Wichtigen Sektor hat selbst C nix verloren, Daniel E, aber das ist ein anderes Thema.[/QB]

    und wahrlich, ich sage dir, ich habe einen kennengelernt, der für atomkraftwerke c++ programmiert hat. und es war ein c, das einer drauf hat, der noch vor "effektiv c++ programmieren" ist.



  • Original erstellt von volkard:
    [...]der für atomkraftwerke c++ programmiert hat.[...]

    Was an diesem Satz impliziert, dass er für kritische Steuerungen und Regelungen programmiert hat? Die Terminierung AKW bedeutet noch lange nicht, dass es auch gleich Lebenskritisch ist, was er gemacht hat?

    -junix

    [ Dieser Beitrag wurde am 24.05.2003 um 09:44 Uhr von junix editiert. ]



  • Original erstellt von junix:
    In Lebens-Wichtigen Sektor hat selbst C nix verloren, Daniel E, aber das ist ein anderes Thema.

    Richtig.

    C ist kaum sicherer als C++.

    Richtig.

    Das Problem bei C++ ist, dass viel zu viele C-Programmierer hingehen und C++ mit C mischen (zum Beispiel die ehlenden C-Casts in C++ Programmen die nun wirklich NICHTS da verloren haben!).

    Klar. C ist für die Probleme von C++ schuld und die einzig ernstzunehmenden Fehlerquellen sind C-Konstrukte in C++-Quellen. Ersetzt man diese durch entsprechende C++-Konstrukte, so erhält man lauter perfekte Programme.

    Original erstellt von Mr. N:
    Ist aber wohl die selbe, die dafür sorgt, dass die Leute an Java nicht nur die API schätzen.

    Java ist einfacher als C++, was es wenigstens erleichert, das Programm formal zu verifizieren (Welche Schlüsse man dann aus den Ergebnissen des Verifiers zieht ist natürlich wieder etwas anderes). Mach' das mal mit C++.



  • Der Betreiber der Seite, meinte dass er Probleme mit g++ und -O3 hatte/hat, ohne die Version zu nennen. Schade dass er nichts mehr daran macht, ein Update auf eine aktuellere oder stabilere Gcc Version hätte vielleicht gut getan.



  • Ich finde auch (mittlerweile), dass man C und C++ nicht mischen sollte. Ich brauchte auch lange Zeit bis ich auf Defines und C-Cast im weitesten Sinne verzichten konnte. Manche Leute muss man halt treten bis sie aufhören Mischmasch-Code zu schreiben 😃 . Viele Leute meinen kryptischer Code ist guter Code und schreiben deshalb C++ Programme in denen (fast) kein C++ zu finden ist und die kein Mensch auf Anhieb versteht (ausser der Verfasser).



  • @Volkrad: Bis Mr.N den selben Respekt von mir bekommt, wie du, wird, trotz deiner Belobigung, noch etwas Zeit vergehen.



  • C++ gibt dem Programmierer viele Freiheiten und dazu das OOP-Modell, in C hat man diese Freiheiten nicht und auhc kein OOP-Modell.

    OOP hat ja nichts mit der Sprache zu tun, die man nutzt.

    Hier ist zB. ein kleines OO Program in ISO C

    //coop.h
    #define class struct
    
    #include <stddef.h>
    #include <stdarg.h>
    
    void *new(const void *class_,...);
    void *copy(const void *class_,const void *obj);
    void delete(void *class_);
    
    typedef void (*ctor_t)(void*,va_list);
    typedef void (*dtor_t)(void*);
    typedef void (*cctor_t)(void*,const void*);
    
    class object {
      size_t size;
      ctor_t ctor;
      dtor_t dtor;
      cctor_t cctor;
    };
    
    //coop.c
    
    #include <string.h>
    #include <stdlib.h>
    #include "coop.h"
    
    void *new(const void *class_,...) {
      const class object *class_m=(const class object *)class_;
      void *data=calloc(1,(class_m->size));
      if(!data)
        return NULL;
      if(class_m->ctor) {
        va_list ap;
        va_start(ap,class_);
        class_m->ctor(data,ap);
        va_end(ap);
      }
      return data;
    }
    
    void delete(void *class_) {
      class object *class_m=(class object *)class_;
      class_m->dtor(class_);
      free(class_m);
    }
    
    void *copy(const void *class_,const void *obj) {
      const class object *class_m=(const class object *)class_;
      void *data=calloc(1,(class_m->size));
      if(class_m->cctor)
        class_m->cctor(data,obj);
      else //Holzhammer Methode
        memcpy(data,obj,class_m->size);
      return data;
    }
    
    //coop.class.h
    #include "coop.h"
    
    class private_foo_impl;
    
    class foo_ {
      size_t size;
      ctor_t ctor;
      dtor_t dtor;
      cctor_t cctor;
    
      int (*get)(const void*);
      void (*set)(void*,int i);
      class private_foo_impl *impl;
    };
    
    extern class foo_ foo;
    
    //coop.class.c
    
    #include "coop.class.h"
    #include <stdlib.h>
    
    class private_foo_impl {
      int i;
    };
    
    static int get(const void *data) {
      return ((const class foo_*)data)->impl->i;
    }
    
    static void set(void *data,int i) {
      ((const class foo_*)data)->impl->i=i;
    }
    
    static void ctor(void *data_,va_list a) {
      class foo_ *data=(class foo_ *)data_;
      data->impl=malloc(sizeof(class private_foo_impl));
      if(!data->impl) //in realit�t braucht man nat�rlich eine besser Fehlerbehandlung!
        return;
      data->impl->i=va_arg(a,int);
    
      data->get=get;
      data->set=set;
    }
    
    static void dtor(void *data) {
      free(((class foo_*)data)->impl);
    }
    
    static void cctor(void *data_,const void *obj) {
      class foo_ *data=(class foo_ *)data_;
      data->impl=malloc(sizeof(class private_foo_impl));
      data->impl->i=((const class foo_*)obj)->impl->i;
    }
    
    class foo_ foo={sizeof(class foo_),ctor,dtor,cctor,get,set,NULL};
    
    //coop.main.c
    #include "coop.class.h"
    #include <stdio.h>
    
    int main(void) {
      class foo_ *f=new(&foo,0);
      printf("%d\n",f->get(f));
      f->set(f,2);
      printf("%d\n",f->get(f));
      return 0;
    }
    

    [ Dieser Beitrag wurde am 24.05.2003 um 12:24 Uhr von kingruedi editiert. ]



  • Es ist doch wohl klar, dass ich meinte, dass C++ die OOP-Sprachstrukturen gibt 🙄 nitpicker 😉

    Original erstellt von volkard:
    **naja, einen kleinen unterschied soll es noch geben. MrN muß netter sein. wenn ich so ne oberscheiße lese wie
    "C ist direkter, in C gibt es viele strenge Konventionen die einem mehr Kontrolle über das Geschehen lassen. C++ gibt dem Programmierer viele Freiheiten und dazu das OOP-Modell, in C hat man diese Freiheiten nicht und auhc kein OOP-Modell"
    , dann beschimpfe ich den autor (ja, autor schreibt man ohne h) erstmal als inkopententen depp (ohne -en, damit ihr es besser verstehen tut). und dann erst sage ich, er solle meine postings in diesem thread erstmal lesen. das darf MrN noch nicht, aber ich habe gute lust, ihn zu meinem hofbeleidiger zu ernennen.
    bitte wendet zu euren gunsten diese, der härtsesten, maßnahme ab, indem ihr MrNs und meine postings lest, bevot ihr mist antwortet.
    **

    Interessant, die einzigen beiden Kontakte die ich mit dir hatte, waren als du mich jeweils als Depp bezeichnest und meinst ich rede oberscheiße 🙄 Ich warte auf de groben fehler. C++ hat mehr Freiheiten, die in C dann mit C99 teilweise auch dazukamen (z.B. freie Variablendeklaration nicht zwingend am Anfang). Außerdem führt man mit Konstruktoren udn vor allem Destruktoren nunmal "versteckten" Code ein. Und erzähl mir nicht, die Sprache C hat direkt ein OOP-Modell, natürlich kann man OOP mit C nachbilden, aber das kann ich mit Assembelr auch. Trotzdem hat Assembelr kein OOP-Sprachmodell.



  • Original erstellt von TriPhoenix:
    Es ist doch wohl klar, dass ich meinte, dass C++ die OOP-Sprachstrukturen gibt 🙄 nitpicker 😉

    hmm, war mir nicht klar, aber jetzt wo du es sagt.



  • Wie gesagt, OOP kannst du in quasi jeder Sprache nachbilden. Das ist ja keine Besonderheit von C++, dass man damit überhuapt OOP machen kann. Nur die Konstrukte, die gibts erst in C++.



  • Ansonsten: bevor mich jemand zum dritten mal falsch versteht 🙄

    IMHO sind alle Sprachen gleich unsicher, sofern man nicht korrekt damit umgeht. Das gilt gleichermaßen für C und C++. Nur imho sind die Fehler, die man machen kann in C meistens sichtbarer, wenngelich man da auch fatalere machen kann, während in C++ sich ab und zu was verstecken kann. Für mich persönlich sind mehr sichtbare Fehler "sicherer" als weniger aber dafür versteckte.



  • Original erstellt von TriPhoenix:
    IMHO sind alle Sprachen gleich unsicher, sofern man nicht korrekt damit umgeht.

    Wie wahr! 😉



  • Die Sprache ist ja auch nur das Werkzeug. Eigentlich könnte man sich die Diskussionen über Sprachen sparen, denn sie sind nur Werkzeuge.

    Als ich früher am Bau gearbeitet hab, und mir wieder wer den Hammer verzogen hat, hab ich Nägel auch mim Stein in die Wand gehauen. Es hat auch funktioniert 😉

    Das einzig wichtige ist der der Hinter der Maschine sitzt. Wenn der Ahnung hat, kann er auch aus Pascal oder *würg* Basic oder anderen Sprachen ne Menge rausholen.

    Ach ja - C++ hat mit den Versteckten Sachen schon so seine Macken. Kann mich noch erinnern, warum ich dauernd Fehler bekommen habe, weil der Konstruktor nicht aufgerufen wurde.

    Der Code hierfür war einfach nur

    Irgendwas< unsigned int > eps[10]
    

    Wenn man da nicht mitloggt, kann einem das zum Wahnsinn Treiben, vorallem wenn es ein Compiler richtig behandelt, und der andere nicht



  • Original erstellt von Daniel E.:
    Klar. C ist für die Probleme von C++ schuld und die einzig ernstzunehmenden Fehlerquellen sind C-Konstrukte in C++-Quellen. Ersetzt man diese durch entsprechende C++-Konstrukte, so erhält man lauter perfekte Programme.

    ... blödsinn und das wiesst du auch. Keine SPrache schützt vor dummen Programmierern Das Probelm bei C-Programmierern die nen C++-Compiler haben ist schlicht das völlig andere Denken das durch C eingeimpft wurde.

    -junix



  • @volkard: Irgendwie ist mir nie bewusst, wenn ich Leute indirekt als inkompetent bezeichne... Gut, dass du mich darauf aufmerksam machst.

    @Helium: Ich zumindest verlange von dir auf keinen Fall den Respekt, den du volkard entgegenbringst. Das will ich nichtmal. Volkard hat von dir ja auch nur verlangt, mir zu glauben. (Oder habe ich mich verlesen?)


Anmelden zum Antworten