Warum sollte jemand C über C++ verwenden? [closed]

Lesezeit: 10 Minuten

Obwohl die Leute es zu mögen scheinen beschweren In Bezug auf C++ konnte ich nicht viele Beweise dafür finden, warum Sie C C++ vorziehen sollten. C scheint nicht annähernd so viel Flak zu bekommen, und wenn C++ all diese Probleme hat, warum können Sie sich nicht einfach auf die C-Untermenge beschränken? Was sind deine Gedanken/Erfahrungen?

  • Genauer doppelter Link funktioniert nicht mehr … sagt der Typ, der zu spät zur C-Party kommt 🙂

    – Kyle

    4. September 2014 um 14:56 Uhr

  • C ist wirklich besser und einfacher als C++, aber jeder C-Programmierer kann C++ in C umwandeln und lachen.

    – BobRun

    16. Oktober 2015 um 18:18 Uhr

  • Das Erschreckende ist, dass die Leute im Allgemeinen denken, dass “++” bedeutet, dass das wirklich gut ist, tut mir leid, das ist es nicht.

    – BobRun

    16. Oktober 2015 um 18:29 Uhr

  • Abgesehen von den offensichtlichen – kleinen / eingebetteten Geräten – ist C im Allgemeinen besser für reine Zahlenverarbeitungsprobleme (z. B. GPU-Grafikverarbeitung, massiv parallele Physikberechnungen, Pattern Mining usw.), bei denen OOP-Funktionen aufblähen. C++ eignet sich besser zum Modellieren von Systemen, in denen „Dinge“ interagieren, viel einfacher mit OOP-Fähigkeiten.

    – Schrittmacher

    25. Oktober 2016 um 11:29 Uhr

  • Weil JavaScript, Best Practices, C ++ und OOP dumm / zu beschäftigt damit sind, diese abstrakten Probleme zu lösen, die wahrscheinlich nicht wirklich existieren oder jemals gelöst werden müssen.

    – Marschallschiff

    26. Januar 2017 um 11:48 Uhr


Joels Antwort ist aus Gründen gut, die Sie vielleicht haben haben um C zu verwenden, obwohl es ein paar andere gibt:

  • Sie müssen Branchenrichtlinien erfüllen, die in C einfacher zu beweisen und zu testen sind
  • Sie haben Tools, um mit C zu arbeiten, aber nicht mit C++ (denken Sie nicht nur an den Compiler, sondern an alle Support-Tools, Abdeckung, Analyse usw.)
  • Ihre Zielentwickler sind C-Gurus
  • Sie schreiben Treiber, Kernel oder anderen Low-Level-Code
  • Sie wissen, dass der C++-Compiler nicht gut darin ist, die Art von Code zu optimieren, den Sie schreiben müssen
  • Ihre App eignet sich nicht nur nicht für Objektorientierung, sondern wäre auch schwieriger in dieser Form zu schreiben

In manchen Fällen aber schon wollen um C statt C++ zu verwenden:

  • Sie möchten die Leistung von Assembler ohne die Mühe, in Assembler zu programmieren (C++ ist theoretisch zu einer „perfekten“ Leistung fähig, aber die Compiler sind nicht so gut darin, Optimierungen zu sehen, die ein guter C-Programmierer sehen wird).

  • Die Software, die Sie schreiben, ist trivial, oder fast trivial – zücken Sie den winzigen C-Compiler, schreiben Sie ein paar Zeilen Code, kompilieren Sie, und schon sind Sie fertig – Sie müssen keinen riesigen Editor mit Helfern öffnen, keine Notwendigkeit, praktisch zu schreiben leere und nutzlose Klassen, sich mit Namensräumen befassen usw. Sie können fast dasselbe mit einem C++-Compiler machen und einfach die C-Teilmenge verwenden, aber der C++-Compiler ist langsamer, selbst für winzige Programme.

  • Sie benötigen extreme Leistung oder kleine Codegröße und wissen, dass der C++-Compiler dies aufgrund der Größe und Leistung der Bibliotheken tatsächlich erschwert.

Sie behaupten, Sie könnten einfach die C-Teilmenge verwenden und mit einem C++-Compiler kompilieren, aber Sie werden feststellen, dass Sie in diesem Fall je nach Compiler leicht unterschiedliche Ergebnisse erhalten.

Unabhängig davon, wenn Sie das tun, verwenden Sie C. Ist Ihre Frage wirklich “Warum verwenden C-Programmierer keine C++-Compiler?” Wenn dies der Fall ist, verstehen Sie entweder die Sprachunterschiede oder die Compiler-Theorie nicht.

  • Der Leistungsteil ist nicht unbedingt wahr. Es gibt viele Bereiche, in denen C++ weitaus besser optimieren kann als C. (Natürlich gilt gelegentlich auch das Gegenteil, aber im Allgemeinen ist es aus Leistungsgründen eine schlechte Idee, C gegenüber C++ zu wählen).

    – jalf

    31. Januar 2009 um 17:25 Uhr

  • Ich wäre an weiteren Leistungsdaten interessiert. Ich verstehe nicht, warum C nur “gelegentlich” besser abschneiden würde. Bei einem durchschnittlichen Programmierer kann es sein, dass C++ die Erzielung von Leistung erleichtert (gute Verwendung von Mustern), aber ein von einem Experten geschriebenes C-Programm sollte schneller sein – geringerer Overhead.

    – Adam Davis

    31. Januar 2009 um 19:58 Uhr

  • Natürlich würde das Schreiben und Debuggen des schnelleren C-Programms länger dauern, also gibt es einen Kompromiss, und angesichts der Geschwindigkeit von Maschinen lohnt sich der Kompromiss selten, außer für spezialisierte Anwendungen, weshalb C++ im Allgemeinen besser ist. (Bis der Code fertig ist, sind Computer schneller und fressen das Dif)

    – Adam Davis

    31. Januar 2009 um 19:59 Uhr

  • @Adam: C++ schneidet mit “hübschem” Code besser ab als C. C++ kann Templates und Inline-Funktionen verwenden, wo C ein Makro benötigt. C++-Overhead erscheint nur, wenn danach gefragt wird, ansonsten ist es dasselbe wie C. (virtuell, try/throw, dynamic_cast). Ein Großteil des Overheads zeigt sich nur in der Bildgröße des Programms.

    – Zan Luchs

    3. Februar 2009 um 1:41 Uhr

  • @Zan “C++-Overhead wird nur angezeigt, wenn danach gefragt wird, ansonsten ist es dasselbe wie C” Großartig, ich würde wirklich gerne einige Referenzen sehen.

    – Adam Davis

    3. Februar 2009 um 14:13 Uhr

Ich mag Minimalismus und Schlichtheit.

  • OK – fair genug … also warum nicht Forth?

    – Jonathan Leffler

    5. April 2009 um 4:44 Uhr

  • Ich nehme an, er mag es auch, Bibliotheken, Bücher und Foren zur Verfügung zu haben?

    – Gnud

    4. März 2011 um 17:44 Uhr

  • Ich mag den Minimalismus und die Einfachheit Ihrer Antwort … 🙂

    – Joe DF

    7. März 2013 um 17:20 Uhr

  • Zustimmen. C ist sehr einfach und “klein”. C sehen immer gleich aus und wenn Sie ein neuer Mitwirkender an einem Projekt sind, ist es leicht zu verstehen, wie es funktioniert. C++ hat viele nutzlose Dinge und wenn ich mir ein C++-Projekt anschaue, bin ich sofort verwirrt. Ich kann die C++-Leute (eine C-Sprache mit OO-Fähigkeiten) verstehen, aber C ist einfach einfacher und einfacher.

    – Benutzer69969

    24. März 2014 um 18:10 Uhr

  • Dem stimme ich zu 10000000000000000% zu. Ein guter C-Programmierer kann sogar eine große C-Anwendung warten, ohne sich in all den Bullshit-Klassen und Boost!

    – Vahid Amiri

    12. September 2016 um 15:14 Uhr


  • Weil sie C bereits kennen
  • Weil sie eine eingebettete App für eine Plattform erstellen, die nur einen C-Compiler hat
  • Weil sie in C geschriebene Legacy-Software warten
  • Sie schreiben etwas auf der Ebene eines Betriebssystems, einer relationalen Datenbank-Engine oder einer 3D-Videospiel-Engine für den Einzelhandel.

  • Einige Mikrocontroller haben nur C-Compiler, was wirklich scheiße ist. Die grundlegenden C++-Features (Namespaces, Klassen neben virtuellen Funktionen, Enums, Deklaration von Variablen an anderer Stelle neben Top-of-Block) sind meiner Meinung nach die wertvollsten.

    – Jason S

    31. Januar 2009 um 0:29 Uhr

  • Daraus ergibt sich, dass Sie C nur dann wählen würden, wenn es keine vernünftigen Alternativen gibt.

    Joe Calimari

    31. Januar 2009 um 0:30 Uhr

  • @Joe: Abgesehen vom ersten Punkt fasst das ungefähr zusammen. Viele der späteren Sprachen nahmen C und sagten: „Hey, das schaffen wir besser.’

    – Joel Coehoorn

    31. Januar 2009 um 0:47 Uhr

  • Einverstanden. Wenn Sie die ausgefeilten C++-Features nicht verwenden, glaube ich, dass C++ monoton ein besseres C ist. Mit den ausgefeilteren C++-Features werden die Dinge umstrittener, aber dann geht die Debatte normalerweise gegen eine höhere Abstraktionsebene, z. B. Java.

    – Paul Nathan

    31. Januar 2009 um 1:28 Uhr

  • Tatsächlich verwenden die meisten 3D-Game-Engines C++. UE4 verwendet hauptsächlich C++.

    – Aditya Kashi

    21. Oktober 2017 um 20:09 Uhr

Leistungsängste oder Aufblähen sind kein guter Grund, auf C++ zu verzichten. Jede Sprache hat ihre potenziellen Fallstricke und Kompromisse – gute Programmierer lernen diese kennen und entwickeln bei Bedarf Bewältigungsstrategien, arme Programmierer werden scheitern und der Sprache die Schuld geben.

Interpretiertes Python wird in vielerlei Hinsicht als “langsame” Sprache angesehen, aber für nicht triviale Aufgaben kann ein erfahrener Python-Programmierer leicht Code erstellen, der schneller ausgeführt wird als der eines unerfahrenen C-Entwicklers.

In meiner Branche, den Videospielen, schreiben wir Hochleistungscode in C++, indem wir Dinge wie RTTI, Ausnahmen oder virtuelle Funktionen in inneren Schleifen vermeiden. Diese können äußerst nützlich sein, haben aber Leistungs- oder Aufblähungsprobleme, die vermieden werden sollten. Wenn wir noch einen Schritt weiter gehen und komplett auf C umsteigen würden, würden wir wenig gewinnen und die nützlichsten Konstrukte von C++ verlieren.

Der größte praktische Grund für die Bevorzugung von C ist, dass die Unterstützung weiter verbreitet ist als C++. Es gibt viele Plattformen, insbesondere eingebettete, die nicht einmal C++-Compiler haben.

Es gibt auch die Frage der Kompatibilität für Anbieter. Während C über ein stabiles und wohldefiniertes ABI (Application Binary Interface) verfügt, hat C++ dies nicht. Die ABI in C++ ist aufgrund von Dingen wie Vtables und Konstruktoren/Destruktoren komplizierter und wird daher bei jedem Anbieter und sogar bei Versionen einer Anbieter-Toolchain anders implementiert.

In Wirklichkeit bedeutet dies, dass Sie eine von einem Compiler generierte Bibliothek nicht mit Code oder einer Bibliothek eines anderen verknüpfen können, was einen Albtraum für verteilte Projekte oder Middleware-Anbieter von Binärbibliotheken darstellt.

Ich vertrete die andere Ansicht: Warum C++ anstelle von C verwenden?

Das Buch The C Programming Language (alias: K&R) erklärt Ihnen auf weniger als 300 Seiten deutlich, wie Sie alles tun können, was die Sprache kann. Es ist ein Meisterwerk des Minimalismus. Kein C++-Buch kommt auch nur annähernd heran.

Das offensichtliche Gegenargument ist, dass dasselbe von den meisten, wenn nicht allen modernen Sprachen gesagt werden könnte – sie können Ihnen auch nicht sagen, wie man alles auf nur ein paar hundert Seiten macht. WAHR. Warum also stattdessen C++ verwenden? Funktionsreichtum? Leistung? Wenn Sie etwas funktionsreicheres oder leistungsfähigeres benötigen, dann entscheiden Sie sich für C#, Objective C, Java oder etwas Ähnliches. Warum sollten Sie sich mit der Komplexität von C++ belasten? Wenn Sie das Maß an Kontrolle benötigen, das C++ gewährt, dann plädiere ich dafür, C zu verwenden. C kann alles und kann es gut.

  • Ich stimme zu. Ich will Kraft, also benutze ich etwas wirklich Kraftvolles, nicht den 1/2-Wegpunkt.

    – Dina

    2. Februar 2009 um 19:26 Uhr

  • @Dinah: Der 1/2-Wegpunkt bietet Ihnen eine höhere Ausdrucksstärke ohne die Leistungs- und Speicherkosten von C# oder Java.

    – Zan Luchs

    3. Februar 2009 um 1:50 Uhr

  • @Zan Lynx: Du hast recht. Aber ich hoffe, dass ich durch die gegensätzliche Haltung, die ich in meinem ursprünglichen Beitrag eingenommen habe, einen Punkt zur Realisierbarkeit von C gegenüber C++ gemacht habe … auch wenn es, wie Sie betonen, kein offener und geschlossener Fall ist.

    – Dina

    3. Februar 2009 um 4:13 Uhr

Ich habe mich entschieden, in C zu schreiben, weil ich gerne mit einer kleinen, straffen Sprache arbeite. Ich mag es, Zugang zu einem Standard zu haben, der in angemessener Zeit gelesen werden kann (für mich – ich bin ein sehr langsamer Leser). Außerdem verwende ich es, um Software für eingebettete Systeme zu schreiben, für die es nur wenige wünschenswerte C++-Compiler gibt (wie z etwas PIC-Mikrocontroller).

  • Ich stimme zu. Ich will Kraft, also benutze ich etwas wirklich Kraftvolles, nicht den 1/2-Wegpunkt.

    – Dina

    2. Februar 2009 um 19:26 Uhr

  • @Dinah: Der 1/2-Wegpunkt bietet Ihnen eine höhere Ausdrucksstärke ohne die Leistungs- und Speicherkosten von C# oder Java.

    – Zan Luchs

    3. Februar 2009 um 1:50 Uhr

  • @Zan Lynx: Du hast Recht. Aber ich hoffe, dass ich durch die gegensätzliche Haltung, die ich in meinem ursprünglichen Beitrag eingenommen habe, einen Punkt zur Realisierbarkeit von C gegenüber C++ gemacht habe … auch wenn es, wie Sie betonen, kein offener und geschlossener Fall ist.

    – Dina

    3. Februar 2009 um 4:13 Uhr

Neben einigen anderen bereits erwähnten Punkten:

Weniger Überraschung

Das heißt, es ist viel einfacher zu sehen, was ein Codestück tun wird exakt . In C++ müssen Sie sich dem Guru-Level nähern, um genau wissen zu können, welchen Code der Compiler generiert (versuchen Sie eine Kombination aus Templates, Mehrfachvererbung, automatisch generierten Konstruktoren, virtuellen Funktionen und mischen Sie ein wenig Namespace-Magie und argumentabhängige Suche ein).

In vielen Fällen ist diese Magie nett, aber zum Beispiel in Echtzeitsystemen kann sie Ihren Tag wirklich vermasseln.

1424300cookie-checkWarum sollte jemand C über C++ verwenden? [closed]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy