Im Folgenden sind die Vorteile von C ++ aufgeführt
- C ++ bietet die spezifischen Funktionen, nach denen sie fragen
- Ihr C-Compiler ist mit ziemlicher Sicherheit ein C ++ - Compiler, daher gibt es keine Auswirkungen auf die Softwarekosten
- C ++ ist genauso portabel wie C.
- C ++ - Code kann genauso effizient sein wie C (oder mehr oder weniger)
Gibt es konkrete Gründe und spezifische Szenarien, in denen C über C ++ verwendet werden muss?
Verweis auf diese Frage: Bibliothek für Generika in C.
Kein Duplikat, da diese Frage nach Sprachbeschränkungen fragt und nicht nach dem Erlernen einer Sprache gegenüber einer anderen.
Peter Kirkhams Beitrag war für mich der informativste, insbesondere in Bezug auf C99-Themen, die ich nicht berücksichtigt hatte, also habe ich ihn akzeptiert. Vielen Dank an alle anderen, die teilgenommen haben.
Antworten:
C ist eine vollständige Programmiersprache. C ist keine beliebige Teilmenge von C ++. C ist überhaupt keine Teilmenge von C ++.
Dies ist gültig C:
Um es als C ++ kompilieren zu können, müssen Sie schreiben:
das ist nicht mehr gültig C. (Sie könnten die Besetzung im C-Stil verwenden. In diesem Fall würde sie in C kompiliert, aber von den meisten C ++ - Codierungsstandards und auch von vielen C-Programmierern gemieden. .
Sie sind nicht dieselbe Sprache, und wenn Sie ein vorhandenes Projekt in C haben, möchten Sie es nicht in eine andere Sprache umschreiben, nur um eine Bibliothek zu verwenden. Sie würden es vorziehen, Bibliotheken zu verwenden, mit denen Sie in der Sprache, in der Sie arbeiten, eine Schnittstelle herstellen können. (In einigen Fällen ist dies mit einigen wenigen möglich
extern "C"
Wrapper-Funktionen möglich, je nachdem, wie Vorlage / Inline eine C ++ - Bibliothek ist.)Unter der ersten C - Datei in einem Projekt arbeite ich an, ist es das , was passiert , wenn Sie nur Swap
gcc std=c99
fürg++
:Insgesamt 69 Fehlerzeilen, von denen vier ungültige Konvertierungen sind, jedoch hauptsächlich für Funktionen, die in C99, jedoch nicht in C ++ vorhanden sind.
Es ist nicht so, dass ich diese Funktionen zum Spaß benutze. Es würde erhebliche Arbeit erfordern, um es in eine andere Sprache zu portieren.
Es ist also einfach falsch, dies vorzuschlagen
Das Portieren von vorhandenem C-Code in die prozedurale Teilmenge von C ++ hat häufig erhebliche Kostenfolgen.
Der Vorschlag , die C ++ std :: queue-Klasse als Antwort auf die Frage zu verwenden, nach einer Bibliotheksimplementierung einer Warteschlange in C zu suchen, ist daher besser als der Vorschlag , das Ziel C zu verwenden und die Java-Klasse java.util.Queue mit JNI aufzurufen. oder 'CPython-Bibliothek aufrufen' - Ziel C ist tatsächlich eine richtige Obermenge von C (einschließlich C99), und Java- und CPython-Bibliotheken können beide direkt von C aus aufgerufen werden, ohne dass nicht verwandter Code in die C ++ - Sprache portiert werden muss.
Natürlich können Sie der C ++ - Bibliothek eine C-Fassade hinzufügen, aber wenn Sie dies tun, unterscheidet sich C ++ nicht von Java oder Python.
quelle
Mir ist klar, dass es weder eine professionelle noch eine besonders gute Antwort ist, aber für mich ist es einfach, weil ich C. wirklich mag. C ist klein und einfach und ich kann die ganze Sprache in mein Gehirn einpassen. C ++ schien mir immer ein riesiges Durcheinander zu sein Mit allen Arten von Schichten fällt es mir schwer zu grokken. Aus diesem Grund stelle ich fest, dass ich beim Schreiben von C ++ viel mehr Zeit damit verbringe, meinen Kopf zu debuggen und gegen harte Oberflächen zu schlagen, als wenn ich C codiere. Wiederum stelle ich fest, dass ein Großteil davon größtenteils auf meine eigene „Ignoranz“ zurückzuführen ist.
Wenn ich mich entscheiden kann, schreibe ich all die hochrangigen Dinge wie die Interface- und Datenbankinteraktion in Python (oder möglicherweise C #) und all die Dinge, die in C schnell sein müssen. Für mich gibt das das Beste von allen Welten. Alles in C ++ zu schreiben, fühlt sich an, als würde man das Schlimmste von allen Welten bekommen.
Bearbeiten: Ich möchte hinzufügen, dass ich denke, dass C mit einigen C ++ - Funktionen größtenteils eine schlechte Idee ist, wenn mehrere Personen an einem Projekt arbeiten oder wenn die Wartbarkeit Priorität hat. Es wird Meinungsverschiedenheiten darüber geben, was ein paar sind und welche Bits in C ausgeführt werden sollten und welche Bits in C ++ letztendlich zu einer sehr schizophrenen Codebasis führen.
quelle
C ++ wird in einigen realen Umgebungen wie eingebetteten Systemen auf niedriger Ebene einfach nicht unterstützt. Und dafür gibt es einen guten Grund: C ist für solche Dinge leicht gut genug. Warum also etwas Größeres verwenden?
quelle
Ich hasse es, in C ++ zu programmieren.
quelle
Einige Gründe könnten sein:
Ich würde es immer noch vorziehen, in C ++ zu schreiben, wenn ich damit durchkommen kann, und insgesamt denke ich, dass die Vorteile die Nachteile überwiegen. In einigen Fällen kann ich aber auch das Argument für die Verwendung von C erkennen.
quelle
Es gibt viele Argumente über eingebettete Programmierung, Leistung und so, ich kaufe sie nicht. C ++ ist in diesen Bereichen leicht mit C zu vergleichen. Jedoch:
Erst kürzlich, nachdem ich über 15 Jahre in C ++ programmiert hatte, habe ich meine C-Wurzeln wiederentdeckt. Ich muss sagen, dass es in C ++ zwar gute Funktionen gibt, die das Leben leichter machen, aber auch eine Menge Fallstricke und eine Art "es gibt immer einen besseren Weg", Dinge zu tun. Sie werden nie wirklich glücklich über die Lösung, die Sie gemacht haben. (Versteh mich nicht falsch, das könnte eine gute Sache sein, aber meistens nicht).
C ++ gibt Ihnen unendliche Schüsse. Das könnte wohl gut sein, aber irgendwie verbraucht man immer zu viel davon. Dies bedeutet, dass Sie Ihre Lösungen mit "schönen" und "hübschen" Schichten von Abstraktionen, Allgemeinheit usw. verschleiern.
Als ich zu C zurückkehrte, stellte ich fest, dass es wieder Spaß machte, zu programmieren. Nachdem ich so viel Zeit damit verbracht habe, zu modellieren und darüber nachzudenken, wie ich die Vererbung am besten nutzen kann, finde ich, dass die Programmierung in C meinen Quellcode tatsächlich kleiner und lesbarer macht. Dies hängt natürlich von Ihrer Selbstdisziplin ab. Es ist jedoch sehr einfach, zu viele Abstraktionen auf einfachen Code zu setzen, der eigentlich nie benötigt wird.
quelle
infinite gunfire
Oh ja, so wahr. Unsere Füße zittern buchstäblich :)C hat den Hauptvorteil, dass Sie nur sehen können, was wirklich los ist, wenn Sie sich einen Code ansehen (ja, Präprozessor: Kompilieren Sie mit -E und dann sehen Sie es). Etwas, das viel zu oft nicht stimmt, wenn man sich C ++ - Code ansieht. Dort haben Sie Konstruktoren und Destruktoren, die implizit basierend auf dem Umfang oder aufgrund von Zuweisungen aufgerufen werden. Sie haben eine Operatorüberladung, die ein überraschendes Verhalten aufweisen kann, selbst wenn sie nicht stark missbraucht wird. Ich gebe zu, dass ich ein Kontrollfreak bin, aber ich bin zu dem Schluss gekommen, dass dies keine so schlechte Angewohnheit für einen Softwareentwickler ist, der zuverlässige Software schreiben möchte. Ich möchte nur eine faire Chance haben zu sagen, dass meine Software genau das tut, was sie tun soll, und gleichzeitig kein schlechtes Gefühl im Magen hat, weil ich weiß, dass es immer noch so viele Fehler geben kann, dass ich es nicht tun würde. '
C ++ hat auch Vorlagen. Ich hasse und liebe sie, aber wenn jemand sagt, dass er oder sie sie vollständig versteht, nenne ich ihn / sie einen Lügner! Dies schließt sowohl die Compiler-Autoren als auch die Leute ein, die an der Definition des Standards beteiligt sind (was offensichtlich wird, wenn Sie versuchen, ihn zu lesen). Es gibt so viele absurd irreführende Eckfälle, dass es einfach nicht möglich ist, sie alle zu berücksichtigen, während Sie tatsächlichen Code schreiben. Ich liebe C ++ - Vorlagen wegen ihrer Leistungsfähigkeit. Es ist wirklich erstaunlich, was man mit ihnen machen kann, aber sie können auch zu den seltsamsten und am schwersten zu findenden Fehlern führen, die man sich (nicht) vorstellen kann. Und diese Fehler treten tatsächlich auf und nicht einmal selten. Das Lesen der Regeln zum Auflösen von Vorlagen in C ++ ARM lässt meinen Kopf fast explodieren. Und es gibt mir das schlechte Gefühl, Zeit zu verschwenden, wenn ich mehrere 1000 Zeichen lange Compiler-Fehlermeldungen lesen muss, für die ich bereits 10 Minuten oder mehr benötige, um zu verstehen, was der Compiler tatsächlich von mir will. In typischem C ++ (Bibliotheks-) Code finden Sie häufig auch viel Code in Header-Dateien, um bestimmte Vorlagen zu ermöglichen, was wiederum das Kompilieren / Ausführen von Zyklen selbst auf schnellen Computern schmerzhaft verlangsamt und das Neukompilieren großer Teile des Codes erfordert, wenn Sie etwas ändern Dort.
C ++ hat auch die const-Falle. Sie vermeiden entweder const für alle außer den trivialsten Anwendungsfällen, oder Sie müssen es früher oder später wegwerfen oder große Teile der Codebasis umgestalten, wenn sie sich weiterentwickelt, insbesondere wenn Sie ein schönes und flexibles OO-Design entwickeln möchten.
C ++ hat eine stärkere Typisierung als C, was großartig ist, aber manchmal habe ich das Gefühl, ich füttere einen Tamagotchi, wenn ich versuche, C ++ - Code zu kompilieren. Ein großer Teil der Warnungen und Fehler, die ich normalerweise davon bekomme, ist nicht wirklich, dass ich etwas tue, das nicht funktioniert, sondern nur Dinge, die der Compiler nicht so oder so machen möchte, ohne hier und da einige zusätzliche Schlüsselwörter zu verwenden Dort.
Dies sind nur einige der Gründe, warum ich C ++ für Software nicht mag, die ich alleine schreibe, nur mit einigen angeblich robusten externen Bibliotheken. Der wahre Horror beginnt, wenn Sie Code in Teams mit anderen Personen schreiben. Es ist fast egal, ob sie sehr clevere C ++ - Hacker oder naive Anfänger sind. Jeder macht Fehler, aber C ++ macht es absichtlich schwierig, sie zu finden und noch schwieriger, sie zu erkennen, bevor sie auftreten.
Mit C ++ gehen Sie einfach verloren, ohne ständig einen Debugger zu verwenden, aber ich möchte die Richtigkeit meines Codes in meinem Kopf überprüfen können und mich nicht auf einen Debugger verlassen müssen, um meinen Code auf Pfaden zu finden, die ich nie erwartet hätte. Ich versuche tatsächlich, meinen gesamten Code in meinem Kopf auszuführen und alle Zweige zu übernehmen, auch in Unterprogrammen usw., und nur gelegentlich einen Debugger zu verwenden, um zu sehen, wie gut er durch alle gemütlichen Orte läuft, die ich dafür vorbereitet habe. Es ist einfach unmöglich, so viele Testfälle zu schreiben und auszuführen, dass alle Codepfade in allen Kombinationen mit allen möglichen seltsamen Eingabedaten verwendet wurden. Sie kennen die Fehler in C ++ - Programmen möglicherweise nicht, aber das bedeutet nicht, dass sie nicht vorhanden sind. Je größer ein C ++ - Projekt wird, desto geringer wird mein Vertrauen, dass es nicht viele unentdeckte Fehler gibt, selbst wenn es mit allen verfügbaren Testdaten perfekt läuft. Schließlich mache ich es kaputt und beginne neu mit einer anderen Sprache oder einer Kombination anderer Sprachen.
Ich könnte weitermachen, aber ich glaube, ich habe meinen Standpunkt inzwischen klargestellt. All dies hat mich beim Programmieren in C ++ unproduktiv gemacht und das Vertrauen in die Richtigkeit meines eigenen Codes verloren, was bedeutet, dass ich ihn nicht mehr verwenden werde, während ich immer noch C-Code verwende und mich darauf verlasse, den ich mehr als 20 geschrieben habe Jahre zuvor. Vielleicht liegt es einfach daran, dass ich kein guter C ++ - Programmierer bin, oder dass ich in C und anderen Sprachen ziemlich gut bin, um zu erkennen, was für ein Lamer ich eigentlich bin, wenn es um C ++ geht, und dass ich es nie vollständig verstehen kann .
Das Leben ist kurz...
quelle
In einer eingebetteten Umgebung auf niedriger Ebene haben einige der "Software-Ingenieure" einen EE-Hintergrund und haben C kaum beherrscht. C ++ ist komplexer und einige dieser Leute haben einfach Angst, eine neue Sprache zu lernen. Somit wird C als kleinster gemeinsamer Nenner verwendet. (Bevor Sie vorschlagen, diese Typen loszuwerden, sind sie mindestens genauso wichtig wie die CS-Majors, die das analoge Hardcore-Zeug nicht verstehen.)
Aus Erfahrung sprechen, beides geerbt und gepflegt zu haben: Ein schreckliches Design in C ist schwer zu verstehen, abzuwickeln und in etwas Nutzbares umzugestalten.
Ein schreckliches Design in C ++ ist unendlich schlimmer, da zufällige Abstraktionsebenen Ihr Gehirn durch die Codebasis rasen lassen, um herauszufinden, welcher Code unter welchen Umständen ausgeführt werden soll.
Wenn ich mit Ingenieuren zusammenarbeiten muss, von denen ich weiß, dass sie keine großartigen Designs produzieren, hätte ich lieber die ersteren als die letzteren.
quelle
Ich sehe keinen anderen Grund als persönliche Abneigung, selbst für die Programmierung eingebetteter Systeme und ähnlicher Dinge. In C ++ zahlen Sie nur für die von Ihnen verwendeten Funktionen Overhead. Sie können die C-Teilmenge von C ++ in bestimmten Situationen verwenden, in denen der C ++ - Overhead für Sie zu hoch ist. Ich denke jedoch, dass einige C-Programmierer den Overhead einiger C ++ - Konstrukte überschätzen. Lassen Sie mich einige Beispiele auflisten:
Ein triftiger Grund wäre, wenn Sie für eine Plattform programmieren, die keinen anständigen C ++ - Compiler hat (es gibt überhaupt keinen C ++ - Compiler oder einen Compiler, der jedoch schlecht implementiert ist und für einige C ++ - Funktionen einen unnötig hohen Overhead verursacht).
quelle
Warum das Sprechen auf Englisch einschränken? Vielleicht wären Sie ein kreativerer Autor auf Serbisch.
Das ist das gleiche Argument mit offensichtlichen Irrtümern. Wenn Sie eine Aufgabe haben und Ihre komfortablen Werkzeuge die Aufgabe effizient lösen, werden Sie Ihre komfortablen Werkzeuge wahrscheinlich aus gutem Grund verwenden.
quelle
C ++ hat eine viel längere Lernkurve. C hat nur wenige Konstrukte, die Sie kennen müssen, und dann können Sie mit dem Codieren leistungsfähiger Software beginnen. In C ++ müssen Sie die C-Basis, dann die OO und die generische Programmierung, die Ausnahme usw. lernen. Nach einiger Zeit kennen Sie möglicherweise die meisten Funktionen und können sie wahrscheinlich verwenden, aber Sie wissen immer noch nicht, wie der Compiler dies tun wird Übersetzen Sie sie, welchen impliziten Overhead sie haben oder nicht. Dies kostet viel Zeit und Energie.
Für ein professionelles Projekt zählt dieses Argument möglicherweise nicht, da Sie Mitarbeiter beschäftigen können, die C ++ bereits sehr gut kennen. In Open Source-Projekten, in denen C immer noch häufig verwendet wird, wählen die Benutzer die Sprache aus, die sie mögen, und sie können sie verwenden. Bedenken Sie, dass nicht jeder OS-Programmierer ein professioneller Programmierer ist.
quelle
Ich möchte die Antwort von Dan Olson weiterverfolgen. Ich glaube, dass die Leute die potenziell gefährlichen und kontraproduktiven Funktionen von C ++ fürchten, und das zu Recht. Aber anders als Dan sagt, denke ich aus zwei Gründen nicht, dass die einfache Entscheidung für einen Codierungsstandard effektiv ist:
Ich denke, dass der zweite Grund hier viel wichtiger ist als der erste, da die Entscheidung für einen Kodierungsstandard leicht zu einer politischen Angelegenheit werden und später überarbeitet werden kann. Betrachten Sie den folgenden vereinfachten Fall:
(Die Alternative, dass der Standard in Schritt 3 nicht überarbeitet wird, ist empirisch zu unwahrscheinlich, um in Betracht gezogen zu werden, und wäre sowieso nicht viel besser.)
Obwohl ich C ++ vor ein paar Jahren für fast alles verwendet habe, habe ich das starke Gefühl, dass C für Aufgaben auf niedriger Ebene vorzuziehen ist, die entweder von C oder C ++ erledigt werden müssen, und alles andere sollte in einem anderen erledigt werden Sprache ganz. (Nur mögliche Ausnahmen sind bestimmte Hochleistungsproblemdomänen, z. B. Blitz ++ )
quelle
Ich verwende C oder exportiere zumindest eine C-Schnittstelle, wenn ich Bibliothekscode schreibe.
Ich möchte keine schlecht definierten ABI-Probleme.
quelle
Ich habe noch nie Argumente für die Verwendung von C über C ++ gesehen, die ich für überzeugend halten würde. Ich denke, die meisten Menschen haben Angst vor bestimmten Funktionen, die C ++ bietet, oft zu Recht. Dies überzeugt mich jedoch nicht, da man durch Codierungsstandards durchsetzen kann, ob bestimmte Funktionen verwendet werden sollen oder nicht. Selbst in C gibt es viel, was Sie vermeiden möchten. Das vollständige Verwerfen von C ++ bedeutet im Wesentlichen, dass es keine konkreten Vorteile gegenüber C bietet, die dazu beitragen würden, besseren Code zu schreiben. Diese Ansicht halte ich für ziemlich unwissend.
Darüber hinaus scheinen die Leute immer die Situation von Plattformen zu erhöhen, auf denen kein C ++ - Compiler existiert. Sicherlich wäre C hier angemessen, aber ich denke, es würde Ihnen heutzutage schwer fallen, eine solche Plattform zu finden.
quelle
Ein Punkt, den ich noch nicht angesprochen habe, ist meiner Meinung nach der wichtigste:
Die meisten Bibliotheken, die ich täglich benutze, sind C-Bibliotheken mit Bindungen für Python, Ruby, Perl, Java usw. Soweit ich gesehen habe, ist es viel einfacher, C-Bibliotheken mit 19 verschiedenen Sprachbindungen zu verpacken, als dies der Fall ist C ++ - Bibliotheken umbrechen.
Zum Beispiel habe ich Kairo einmal gelernt und es seitdem in 3 oder 4 verschiedenen Sprachen verwendet. Großer Gewinn! Ich würde lieber ein Programm schreiben, das in Zukunft wieder verwendet werden kann, und ein Programm zu schreiben, das leicht in andere Programmiersprachen übernommen werden kann, ist ein extremer Fall.
Ich weiß, dass es möglich ist, C ++ - Bibliotheken zu binden, aber AFAICT ist es nicht dasselbe. Ich habe Qt (v3 und v4) in anderen Sprachen verwendet und es ist bei weitem nicht so schön zu verwenden: Sie möchten C ++ in einer anderen Sprache schreiben, nicht wie native Bibliotheken. (Sie müssen C ++ - Methodenzeichen als Zeichenfolgen übergeben!)
C ++ ist wahrscheinlich eine bessere Sprache, wenn Sie eine Funktion schreiben, die einmal verwendet werden soll, oder wenn Sie glauben, dass die ganze Welt C ++ ist. C scheint eine einfachere Sprache zu sein, wenn Sie von Anfang an auf Sprachportabilität ausgelegt sind.
quelle
Die Windows-Kernel-Entwicklung unterstützt C ++ (leider) nicht.
quelle
Sie können eine unterhaltsame schimpfen darüber , warum Linus Torvalds favorisiert C lesen hier
quelle
Native Code auf einem Mac ist Objective-C. Der native Code auf einem PC ist c (window.h) oder c ++ (mfc). In beiden Umgebungen können Sie c mit nur geringen oder keinen Änderungen verwenden. Wenn ich möchte, dass eine Codebibliothek plattformübergreifend ist, scheint ansi c eine gute Wahl zu sein.
quelle
Ich kann mir mehrere Gründe vorstellen.
Möglicherweise gibt es keinen zufriedenstellenden C ++ - Compiler. C ++ ist eine viel größere Sprache, und ich habe C-Compiler auf Systemen ausgeführt, die mit modernem C ++ nicht umgehen können.
Der Fragesteller oder die Personen, mit denen er oder sie zusammenarbeitet, sind möglicherweise mit C vertraut, nicht jedoch mit C ++.
Das Projekt befindet sich möglicherweise in C. Obwohl es möglich ist, C einige C ++ - Funktionen hinzuzufügen, kann dies leicht zu einem nicht zu wartenden Durcheinander führen. Ich würde vorschlagen, die eine oder andere Sprache auszuwählen (normalerweise C ++, wenn es praktisch ist).
Der Fragesteller hat möglicherweise eine veraltete Ansicht der Lernkurve von C ++. (Bei richtiger Annäherung ist es einfacher als bei C. Die meisten Einführungsbücher, die ich gesehen habe, nähern sich nicht richtig.)
Denken Sie daran, dass C und C ++ zwei verschiedene Sprachen sind und sich mit der Zeit immer mehr unterscheiden. Es ist eine schlechte Idee, beide gleichzeitig zu codieren, und bei Verwendung einer C-ähnlichen Teilmenge von C ++ fehlen die meisten Vorteile von C ++.
quelle
Wenn Sie in einer Umgebung mit zwei Sprachen arbeiten, können Sie C für einige leistungskritische Funktionen auf niedriger Ebene und eine funktionalere / höhere Sprache wie C # / Java für die Geschäftslogik verwenden. Wenn für diese Funktionen C ++ - Code verwendet wird, sind C-Wrapper für JNI / nicht verwalteten Code erforderlich. Dies macht die Dinge komplexer als die alleinige Verwendung von C.
quelle
Ich benutze C ++ mit C-Programmierung aus zwei Gründen:
vector
undstring
um die Array-Speicherverwaltung von mir wegzubekommenEs ist also C, der wirklich ein paar C ++ ausleiht, aber den C ++ - Compiler so oft wie möglich verwendet. Wie jemand anderes in den Antworten sagt, finde ich jetzt, dass ich auf diese Weise tatsächlich mehr C ++ aufgreife und wo C zu involviert wäre, verwende ich C ++. Das Überwachen / Sperren mit RAII ist eines davon, das ich kürzlich beim Umgang mit Multithread-Programmen und einem anderen ähnlichen Konstrukt zum Öffnen / Schließen von Dateien verwendet habe.
quelle
Ich denke, C ist tragbarer. Ich habe vor ungefähr 5 Jahren einige Arbeiten durchgeführt, um Code auf viele Unix-Varianten (AIX, Irix, HPUX, Linux) zu portieren. Der C-Code war leicht zu portieren, aber wir hatten verschiedene Probleme, einen Teil des C ++ - Codes zu portieren. Vielleicht waren es nur unreife Entwicklungsumgebungen, aber aus diesem Grund würde ich lieber C über C ++ verwenden ...
quelle
C ist eine einfache Sprache, C ++ nicht. Für viele Menschen ist C ++ einfach zu kompliziert, um es vollständig zu beherrschen, siehe http://en.wikipedia.org/wiki/C%2B%2B#Criticism .
Aufgrund der Komplexität beherrschen verschiedene Programmierer normalerweise nur verschiedene Teilmengen der Sprache. Es macht das Lesen des Codes anderer Leute schmerzhaft.
Die Komplexität und die Fallstricke der Sprache lenken zu sehr ab und beeinträchtigen manchmal die Produktivität. Anstatt mich auf den Job selbst zu konzentrieren, kämpfte ich oft mit der Sprache selbst. Java / Python sind produktivere Alternativen.
Das Debuggen eines defekten C-Codes ist normalerweise viel einfacher als das Debuggen eines defekten C ++ - Codes.
Im Gegensatz zu Java / C # erreicht die C ++ - Standardbibliothek nur wenig über den Rahmen der C-Standardbibliothek hinaus.
Einige berühmte Programmierer wie Linus Torvalds (Linux) und Richard Stallman (Emacs) mögen C ++ nicht.
quelle
Die meisten Programmierer halten es für selbstverständlich, dass jeder Qualität als hohe Priorität ansieht. Das ist nicht immer der Fall. Wenn Sie an C gewöhnt sind, scheint C ++ hinter den Kulissen zu viel für Sie zu tun. Die Strenge der Typprüfung in C ++ scheint ebenfalls einschränkend zu sein. Viele Menschen sind bereit zu riskieren, die Art von Fehlern einzuführen, die C ++ verhindern kann, um diese "Belästigungen" zu vermeiden.
quelle
Ich kann mir drei Gründe vorstellen. Zum einen eignet sich C aufgrund der geringen Größe seiner Binärdateien und der größeren Verfügbarkeit von C-Compilern auf jedem System besser für eingebettete Systeme. Die zweite ist die Portabilität: C ist eine kleinere Sprache, und ANSI C-Code wird überall kompiliert. In C ++ ist es einfacher, die Portabilität zu unterbrechen. Der letzte ist die Sprache selbst. C ++ ist schwieriger und definitiv eine sehr schlecht gestaltete Sprache. Torvalds Griffe sind oben angegeben. Möglicherweise möchten Sie auch die häufig gestellten Antworten zu C ++ ( http://yosefk.com/c++fqa/ ) lesen .
quelle
Portabilität kann ein Problem sein. Anders als bei Gordon Carpenter-Thomp würde ich vorschlagen, dass es sich eher um die Laufzeitunterstützung verschiedener Versionen von libstdc ++ unter verschiedenen Linux / Unix-Versionen handelt. Siehe diesen Link für eine gute Diskussion darüber. Ein kleiner Auszug:
quelle
Ich kann hier vielen Vorschlägen in beide Richtungen folgen. Aber am Ende kommt es auf a) vergleichbare einfache b) vergleichbare komplexe.
Ich habe keine Ahnung, ob jemand eine Art Sprachkomplexitätsmessung "erfunden" hat.
Auf einer Skala von 0 bis 10 würde ich C wahrscheinlich mit 2 oder 3 bewerten, während C ++ zwischen 8 und 10 liegen würde. Ich würde behaupten, C ++ ist eine der komplexesten Sprachen, aber ich kenne zB Ada, PL1 oder ähnliches nicht. Vielleicht ist es im Vergleich zu einer anderen Sprache nicht so komplex.
C ++ erbt die gesamte Komplexität von C, sodass sie nicht unter der Komplexitätsstufe von C liegen kann.
Ich für meinen Teil würde mich mit einer Skriptsprache und C viel wohler fühlen. Am Ende muss man also die folgende Frage beantworten. "Ist mehr immer besser?"
quelle
Das Nützlichste, was ich in C gefunden habe, ist das Fehlen von Namespaces und Überladungen: Funktions- und Symbolnamen sind eindeutige Bezeichner. Um die Orte zu finden, an denen diese Symbole verwendet werden, können Sie einfach
grep
die Quellcodedateien durchsuchen. In den Suchergebnissen werden die Orte angezeigt.Dies ist wichtig, wenn Sie eine neue Funktion oder Komponente an ein altes und verworrenes System anschließen.
In C ++ ist dies ohne ein ausgeklügeltes Tool zum Erstellen von Anrufdiagrammen nicht einfach.
quelle
Die meisten Leute scheinen zu denken, dass C und C ++ irgendwie verwandt sind, aber sie irren sich leider. C ++ ist eine völlig andere Sprache als C.
In C ++ denken Sie in Objekten und wie sie miteinander in Beziehung stehen. In C denken Sie in APIs. Es ist wie der Unterschied zwischen Tag und 17.
Eine schlechte Analogie: Wenn jemand Chinesisch zu Englisch hinzufügt und es Englisch ++ nennt, würden Sie sich wahrscheinlich nicht wohl fühlen, wenn Sie Ihrem neuesten Liebesbrief eine chinesische Zeile hinzufügen, weil es in diesem Teil von Englisch ++ so viel einfacher ist, Liebe auszudrücken.
quelle
Die folgenden Gründe sprechen dafür, dass es vorteilhaft sein kann, ein Projekt auf C zu beschränken:
quelle