Vorteile, Nachteile und Anwendungsbereiche von C und C++



  • berniebutt schrieb:

    Das Thema ist sehr komplex und führt in diesem Forum oft zu heftigen Diskussionen C oder C++?

    Die letzte, die sogar genau das als Thema hatte, war die hier. (nicht, dass der Thread empfehlenswert wäre)

    Sonst, kann sich Seron ja mal das Buch "The Design and Evolution of C++" aus der Bibliothek ausleihen. Ich fand das sehr interessant.

    Z schrieb:

    Wie, Beleg? 😕
    C++ ist ein vollständiger Ersatz für C, deshalb nicht.

    Daraus folgt aber nicht "C wird heute kaum noch verwendet". Ich möchte nur wissen, wie Du darauf gekommen bist. Es gibt doch haufenweise reine C-Projekte (Linux Kernel, GTK, Gimp, Git, LAME, ffMPEG,...)

    l'abra d'or schrieb:

    [...] und zwar nicht nur in Bereichen wo C++ einen inakzeptablen Overhead mitbringt [...]

    Kennst Du den C++ Performance Report? Den hat man geschrieben, weil es genug Leute gibt, die genau das behaupten, was Du auch behauptet hast -- angeblich zu unrecht.



  • krümelkacker schrieb:

    Z schrieb:

    Wie, Beleg? 😕
    C++ ist ein vollständiger Ersatz für C, deshalb nicht.

    Daraus folgt aber nicht "C wird heute kaum noch verwendet". Ich möchte nur wissen, wie Du darauf gekommen bist. Es gibt doch haufenweise reine C-Projekte (Linux Kernel, GTK, Gimp, Git, LAME, ffMPEG,...)

    Ja, Du hast recht. Ich habe mich falsch ausgedrückt. Ich wollte vielmehr das sagen: "Es gibt heute keinen triftigen Grund mehr C zu verwenden, weil man mit C++ alles machen kann, was man auch mit C machen kann". 😉



  • krümelkacker schrieb:

    Kennst Du den C++ Performance Report? Den hat man geschrieben, weil es genug Leute gibt, die genau das behaupten, was Du auch behauptet hast -- angeblich zu unrecht.

    Danke, kannte den Bericht nicht, werd ich mir mal anschauen.
    Ich hab aber mit "Overhead" jetzt nicht unbedingt (nur) eine mögliche Performancebremse gemeint, sondern die C++-Runtime. Es gibt immer noch Geräte, die sowenig Speicher haben, dass selbst eine C-Runtime abgespeckt werden muss (uclibc, z.B.). Und C++-Programme sind ja auch oft selber größer als das C-Pendant.
    Bin aber immer offen für eine Geraderückung meines Halbwissens 🙂



  • Z schrieb:

    krümelkacker schrieb:

    Z schrieb:

    Wie, Beleg? 😕
    C++ ist ein vollständiger Ersatz für C, deshalb nicht.

    Daraus folgt aber nicht "C wird heute kaum noch verwendet". Ich möchte nur wissen, wie Du darauf gekommen bist. Es gibt doch haufenweise reine C-Projekte (Linux Kernel, GTK, Gimp, Git, LAME, ffMPEG,...)

    Ja, Du hast recht. Ich habe mich falsch ausgedrückt. Ich wollte vielmehr das sagen: "Es gibt heute keinen triftigen Grund mehr C zu verwenden, weil man mit C++ alles machen kann, was man auch mit C machen kann". 😉

    Du denkst scheinbar nur an Userprogramme wie das neueste Nero oder so. Da macht es tatsächlich keinen Sinn, C zu verwenden. Solche Programme sind aber nicht das einzige Gebiet, auf dem programmiert wird. Der Mikrocontroller in deinem Toaster ist da schon was ganz anderes... 😉



  • > sondern die C++-Runtime.

    Es ist ja auch Quatsch, eine Desktop-Runtime auf µControllern ein zu setzen.



  • - erledigt -



  • Simon2 schrieb:

    Z schrieb:

    ...C++ ist ein vollständiger Ersatz für C, deshalb "kaum noch".

    Selbst wenn das Argument stimmten (was ich bezweifele), hieße das noch gar nichts.
    Es gibt genug Beispiele dafür, dass sich "besser", "neuer", "Nachfolger", ... nicht in der Breite durchsetzen.

    Woran auch immer das liegen mag. C++ ist definitiv das bessere C, auch wenn man Objektorientierung nicht verwenden will (oder darf).



  • Z schrieb:

    C++ ist definitiv das bessere C, auch wenn man Objektorientierung nicht verwenden will (oder darf).

    Es wird immer spannender 🙂
    Warum sollte man C++ Programmieren, wenn man dann auf OOP verzichtet - auch wenn is in dem Fall durchaus angebracht wäre?



  • Z schrieb:

    Woran auch immer das liegen mag. C++ ist definitiv das bessere C, auch wenn man Objektorientierung nicht verwenden will (oder darf).

    Bilder sagen mehr als 1000 Worte:

    +-----------+
             |           |
    +--------+--+        |
    |        |//|  C     |
    |        |//|        |
    |    C++ |//|        |
    |        +--+--------+
    |           |
    +-----------+
    

    nur im schraffierten Bereich treffen deine Aussagen zu, also da, wo sich die Anwendungsbereiche von C und C++ überlappen



  • Z schrieb:

    C++ ist definitiv das bessere C, auch wenn man Objektorientierung nicht verwenden will (oder darf).

    Wie wohl alle hier bin ich jetzt sehr auf die Begründung gespannt. 😉



  • l'abra d'or schrieb:

    Z schrieb:

    C++ ist definitiv das bessere C, auch wenn man Objektorientierung nicht verwenden will (oder darf).

    Es wird immer spannender 🙂
    Warum sollte man C++ Programmieren, wenn man dann auf OOP verzichtet - auch wenn is in dem Fall durchaus angebracht wäre?

    Och, ich mag templates, die StdLib, exceptions, ... schon....

    Ich denke, aber (wie bei all diesen "Programmiersprachendebatten"), dass die Entscheidung für/gegen eine Programmiersprache in der Realität zu 99% von anderen Faktoren bestimmt wird als Sprachmittel, Syntax, ... .
    Deswegen ist es müssig, da einen zusammenhang herstellen zu wollen.

    Gruß,

    Simon2.



  • Und schon jetzt sind wir wieder dort angelangt, was ich befürchtet hatte. Eine für mich sinnlose Diskussion um C und C++.

    C --> Die weiter bleibende Grundlage
    C++ --> Die sehr nützliche Erweiterung davon

    daddeldu - ich habe fertig! :p



  • l'abra d'or schrieb:

    Z schrieb:

    C++ ist definitiv das bessere C, auch wenn man Objektorientierung nicht verwenden will (oder darf).

    Es wird immer spannender 🙂
    Warum sollte man C++ Programmieren, wenn man dann auf OOP verzichtet - auch wenn is in dem Fall durchaus angebracht wäre?

    Du könntest Templates verwenden, Konstruktoren und Destruktoren in Strukturen, RAII, Smartpointer, die STL, Typüberprüfung ist auch strikter als in C, usw.

    zwutz schrieb:

    Bilder sagen mehr als 1000 Worte:

    +-----------+
             |           |
    +--------+--+        |
    |        |//|  C     |
    |        |//|        |
    |    C++ |//|        |
    |        +--+--------+
    |           |
    +-----------+
    

    Nein, die C-Menge muß von der C++-Menge umschlossen werden.
    http://upload.wikimedia.org/wikipedia/commons/thumb/a/a8/Set_subsetAofB.svg/300px-Set_subsetAofB.svg.png
    (A ist C, B ist C++)



  • Z schrieb:

    Nein, die C-Menge muß von der C++-Menge umschlossen werden.
    http://upload.wikimedia.org/wikipedia/commons/thumb/a/a8/Set_subsetAofB.svg/300px-Set_subsetAofB.svg.png
    (A ist C, B ist C++)

    void f(restrict int* p) {
      int arr[*p];
    }
    

    warum mag mein legaler c code nicht mit einem c++ compiler kompiliert werden?



  • Z schrieb:

    Nein, die C-Menge muß von der C++-Menge umschlossen werden.

    Es geht um Anwendungsbereiche in der Realität 🙄

    zwutz schrieb:

    nur im schraffierten Bereich treffen deine Aussagen zu, also da, wo sich die Anwendungsbereiche von C und C++ überlappen



  • Die C/C++-Diskussion gabs schon tausend mal in anderen Threads, sie ist absolut müßig und liefert ziemlich sicher nichts neues mehr.
    Gebt mir daher schnell einen Grund warum ich diesen Thread, statt ihn gleich dicht zu machen, offen lassen und auf die "Rund um die Programmierung"-Halde verklappen soll.
    Hier gehört er auf jeden Fall nicht hin, in diesem Forum gehts um Standard-C++, nicht um den hundertjährigen C-C++-Bruderkrieg.



  • Shade Of Mine schrieb:

    Z schrieb:

    Nein, die C-Menge muß von der C++-Menge umschlossen werden.
    http://upload.wikimedia.org/wikipedia/commons/thumb/a/a8/Set_subsetAofB.svg/300px-Set_subsetAofB.svg.png
    (A ist C, B ist C++)

    void f(restrict int* p) {
      int arr[*p];
    }
    

    warum mag mein legaler c code nicht mit einem c++ compiler kompiliert werden?

    "restrict" und VLAs sind in C dazugekommen, nachdem sich C++ von C abgespaltet hat. Aber wir sollten die Tatsache, daß C++ Nachfolger von C ist, nicht an solchen unbedeutenden Einzelheiten festmachen. 😉



  • Alleserklärmüsser schrieb:

    Z schrieb:

    Nein, die C-Menge muß von der C++-Menge umschlossen werden.

    Es geht um Anwendungsbereiche in der Realität

    Das ist doch noch besser. Es gibt keinen vernünftigen Grund, heute noch altes C einzusetzen, außer man hat nur einen C, aber keinen C++ Compiler zur Verfügung.



  • Z schrieb:

    "restrict" und VLAs sind in C dazugekommen, nachdem sich C++ von C abgespaltet hat. Aber wir sollten die Tatsache, daß C++ Nachfolger von C ist, nicht an solchen unbedeutenden Einzelheiten festmachen. 😉

    const var = 10;
    

    ist legal C. Geht mit C++ auch nicht.
    Wenn du erst sagst, C ist in C++ komplett enthalten, und nun einschränkst auf "C von anno dazumal, als sich C++ abgespalten hat", ist das relativer Murks 😉
    Schau dir auch mal den Standard an, da sind sicher einige Sachen zu finden, die in C++ eigentlich nicht mehr erlaubt sind, in C aber schon.



  • Z schrieb:

    C++ ist ein vollständiger Ersatz für C, deshalb "kaum noch".

    Wie bitte?
    Wir verwenden im Unternehmen fast ausschließlich C und kaum C++. Selbst neue Projekte werden noch in C geschrieben. Ein "Ersatz" ist es mit Sicherheit nicht.

    C++ erweitert C lediglich um die Objektorientierung und ist genau wie Delphi eine Hybridsprache. D.h. aber nicht, dass ein rein prozedural basierender C++ Code auch mit einem C Compiler fehlerfrei kompiliert.

    Es gibt da schon ein paar Unterschiede, bspw. bei der Variablen Deklaration.


Anmelden zum Antworten