Diskussion:C vs C++

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche

Mit einigen in diesem Artikel präsentierten Klischees bin ich so nicht wirklich einverstanden

  • C ist al Teilmenge in C++ enthalten

Das war mal so, gilt aber schon lange nicht mehr. C++ hat sich von C entfernt und schon lange sind gültige C Programme keine gültigen C++ Programme mehr. Bzw auch umgekehrt: Beschränkt man sich auf den C-Teil von C++, so ist das noch lange kein gültiges C mehr bzw. man muss es in C so schreiben, wie man es in C besser nicht schreibt.

  • Die Sprachsyntax von C++ verschleiert auch nicht mehr, als es die von C tut. Einen eventuellen Overhead kann man sich leicht einhandeln, indem man Dinge aus der STL benutzt. Allerdings gilt das so auch wieder nicht. Denn wenn man funktional gleichwertige Programme in C schreibt, landt man beim gleichen, wernn nicht höheren Aufwand. Einzig die Stream-Library und da wiederrum die I/O Streams cin bzw. cout schlagen mit hohen Overhead Zahlen zu Buche und sind auch meistens langsamer als die printf/scanf Variante. Auf der anderen Seite ist das der Preis, den man für typsicheres I/O zahlen muss.
  • Die Fussangel Beispiele zeigen eigentlich nur eines: Derjenige der C++ programmiert hat viel zu lernen. Stichhaltig ist (bis auf eines) keines der Argumente. 'Vorsorglich angelegte Konstruktoren/Destruktoren' zeigen, dass der Programmierer noch Nachholbedarf hat. Dass etwas einfach so aus Java übernommen wird, ist kein Argument für oder gegen C++ - C++ ist nicht Java. Die I/O Sache geht in Ordnung, hat allerdings auch einen Grund: typsicheres I/O mit der Möglichkeit seine eigenen Klassen ebenfalls typsicher ins I/O Sytstem einzubinden. Die Sache mit den virtuellen Funktionsaufrufen: Kennt der COmpiler den tatsächlichen Datentyp, dann macht er auch keinen virtuellen Funktionsaufruf - in den anderen Fällen lautet der Vergleich nicht "man benutzt eine virtuelle Funktion, wenn man in C einen Funktionspointer benutzen würde" sondern der stichhaltige Vergleich lautet: "In C++ benutzt man virtuelle Funktionen wenn man in C mit einer Typvariable und einem switch-case eine Verzweigungshierarchie aufbauen würde, die je nach Typ eine andere Funktion aufruft". Speziell bei letzterem stellt sich in C dann heraus, dass man dafür zb einen Funktionszeiger benutzen kann. Die switch-case Lösung ist aber der C++ Lösung mit virtuellen Funktionen in jeder Hinsicht unterlegen - sowohl was Performance als auch Watbarkeit angeht. Einziger Nachteil virtueller Funktionen: die unumgängliche vTable, mit der der Mechanismus implementiert wird. Allerdings hört sich das schlimmer an als es ist.

Edt. mfgkw 06:45, 12. Sep. 2011: das Obige war 22:58, 11. Sep. 2011 Kbuchegg (wenn ich das richtig sehe)


Ja, das sehe ich genauso. Um es vernünftig zu machen, müsste man aber etwas weiter ausholen; vielleicht mit ein paar sinnvollen Beispielen und etwas konkreteren Aussagen. Ich würde da erst in 2 oder 3 Wochen dazu kommen.

--Mfgkw 04:48, 12. Sep. 2011 (UTC)