welche vorteile bietet c++ gegenüber c



  • Artchi schrieb:

    C++ ist eine der meist gehassten Sprachen. Aber komischerweise trotzdem meist eingesetzten Sprache. 😃 Und viele Menschen prophezeien jedes Jahr ihren Tod.

    D 2.0 kommt nächstes Jahr.

    http://de.wikipedia.org/wiki/D_(Programmiersprache)

    Besonders da C++ eine Multiparadigmen-Sprache ist, und so viele Einsatzfelder abdeckt, fühlen sich alle anderen Sprachen bedroht. Selbst C Programmierer fühlen sich von C++ bedroht, weil C++ immer mehr in dessen Territorien wildert, da C++ verstärkt in Embedded-Systemen eingesetzt wird. Wer z.B. in den ipod-Nano das Lizenz-Menü aufruft, wird darin die C++ Boost-Library-Lizenz finden.

    im ipod Nano steckt aber auch eine ARM CPU drin und für Embedded Verhältnisse ist eine 32 Bit ARM CPU mit Zig Speicher schon eine recht fette CPU.
    Fett im Sinne von bietet viel Performance, Speicher und ist 32 Bitting.

    Deswegen macht C++ dort auch Sinn, denn so eine ARM CPU ist inzwischen auch so schnell und mindestens so Leistungsfähig wie ein Pentium 1 bei dem man früher schon C++ verwendet hat.

    Aber für andere Embedded Computer bzw. Mikrocontroller wie z.B. ATMega8, MSP430 oder PIC ist C++ natürlich völliger Overhead und Quatsch.

    Denn der Speicher ist bei diesen CPU Architekturen auf wenige KByte bestennfalls noch wenige MByte begrenzt und daher wird man darauf nie Großprojekte realisieren, wo C++ seine Vorteile ausspielen könnte.
    Deswegen schreibt man für diese auch keinen C++ Compiler, C reicht hier völlig und die C++ STD würde nur den ganzen Flashspeicher auf diesen kleinen Minicomputern wegfressen.

    C++ ist dort also völlig unnötig.

    Sinn macht C++ also erst auf leistungsfähigeren Embedded Computern wie eben ARM oder AVR32 Sinn.
    Die eigentliche Frage ist also, werden die ARM und AVR32 µC irgendwann die anderen kleineren µC verdrängen, wenn man diese Frage mit ja beantworten kann, dann kann man durchaus auf C++ für Embedded hoffen.

    Noch eine Anmerkung zu Simulationen:
    John Carmack hat sein Doom 3 in C geschrieben.



  • C++ antworter schrieb:

    Einen C Compiler für einen Mikrocontroller kriegt man aber immer.

    Und damit kann man von Comeau deren C++ Compiler dafür portieren lassen, denn dieser Compiler erzeugt ohnehin nur C-Code.



  • ~john schrieb:

    C++ antworter schrieb:

    Einen C Compiler für einen Mikrocontroller kriegt man aber immer.

    Und damit kann man von Comeau deren C++ Compiler dafür portieren lassen, denn dieser Compiler erzeugt ohnehin nur C-Code.

    Wenn dem so ist, dann brauche ich aber auch kein C++, sondern kann auch gleich Vala als Programmiersprache einsetzen.



  • C++ antworter schrieb:

    NoName57253 schrieb:

    Naja, letztlich hab ich mich für C entschieden da :

    Das ist schade. Ich will Dir nicht vorschreiben, was Du zu lernen hast. Aber wenn Du die Wahl zwischen C und C++ hast, dann würde ich Dir zu C++ raten.

    Ich sehe das anders.
    Er ist Neuling und deswegen ist C besser geeignet, da der Sprachumfang kleiner ist.

    Wenn er dann C beherrscht, dann kann er auf C++ umsteigen und weiterlernen.

    Damit solltest Du heutzutage zu der Minderheit gehören, die diese Meinung vertritt. Siehe http://www.research.att.com/~bs/new_learning.pdf

    C++ antworter schrieb:

    Noch eine Anmerkung zu Simulationen:
    John Carmack hat sein Doom 3 in C geschrieben.

    Das kaufe ich Dir nicht ab.
    http://en.wikipedia.org/wiki/Id_Tech_4

    C++ antworter schrieb:

    Wenn dem so ist, dann brauche ich aber auch kein C++, sondern kann auch gleich Vala als Programmiersprache einsetzen.

    Schreib doch mal etwas, womit man Dich ernst nehmen kann.

    kk



  • C++ antworter schrieb:

    Ich sehe das anders.
    Er ist Neuling und deswegen ist C besser geeignet, da der Sprachumfang kleiner ist.

    Wenn er dann C beherrscht, dann kann er auf C++ umsteigen und weiterlernen.

    Was für ein Schwachsinn. In C++ programmiert man komplett anders als in C, das Umlernen hat dann oft einen Misch-Stil zur Folge.



  • krümelkacker schrieb:

    Damit solltest Du heutzutage zu der Minderheit gehören, die diese Meinung vertritt.

    (ich bin zwar nicht der Angesprochene, aber ...)

    ... seit wann wird Wahrheit denn nach dem Mehrheitsprinzip entschieden? 😃

    wie wäre es mit dieser Reihenfolge:

    1. C lernen (=> wg. Syntax, Zeiger usw)
    2. eine echte objektorientierte Sprache lernen (=> wg. Konzept OOP)
    3. C++ verstehen.



  • krümelkacker schrieb:

    C++ antworter schrieb:

    Noch eine Anmerkung zu Simulationen:
    John Carmack hat sein Doom 3 in C geschrieben.

    Das kaufe ich Dir nicht ab.
    http://en.wikipedia.org/wiki/Id_Tech_4

    😃 Fail...

    ... seit wann wird Wahrheit denn nach dem Mehrheitsprinzip entschieden? 😃

    Lies den Text, verstehe die Argumente (ja, echte Argumente 😮 ) und schließe dich der Mehrheit an. Geht natürlich nur, wenn du nicht sowieso schon entschlossen hast gegen die mehrheitliche Meinung zu sein.

    1. C lernen (=> wg. Syntax, Zeiger usw)
    2. eine echte objektorientierte Sprache lernen (=> wg. Konzept OOP)
    3. C++ verstehen.

    1. Braucht man nicht, Syntax, Zeiger, etc. lernt man auch wunderbar direkt mit einem guten (!) C++ Buch.
    2. Was ist denn eine "echte" OO Sprache? Eine mit Message Passing? 😉
    3. Das wäre ein guter Punkt um anzufangen. Direkt die C++ Denkweise verstehen und so gar nicht erst auf die Idee kommen C mit Klassen zu schreiben.



  • Faul schrieb:

    Lies den Text, verstehe die Argumente (ja, echte Argumente 😮 ) und schließe dich der Mehrheit an.

    ich kann nicht lesen 😮

    Mehrheitsmeinung ist immer nur eine Momentaufnahme.

    Früher war mal die Mehrheitsmeinung, daß "echte" Programmierer nur einen Assembler brauchen.

    Heute programmieren "echte" Programmierer mit C++ oder java und lachen über diese Idee.

    Im Jahr 2100 giltst du vielleicht als Ewiggestriger, wenn du noch in Lisp oder haskell programmierst, weil dann Mehrheitsmeinung ist, daß "echte" Programmierer in C++p (C++ mit Prolog) oder APL programmieren.

    Wer weiß das schon. Nur eins ist klar: das Abstraktionsniveau steigt.



  • ich kann nicht lesen 😮

    Den Eindruck habe ich auch.

    Mehrheitsmeinung ist immer nur eine Momentaufnahme.

    Man muss aber noch zwischen Trend und begründeter Argumentation unterscheiden können. Es ist nicht nur einfach in Mode zu sagen "C vor C++ zu lernen macht wenig Sinn", sondern es gibt tatsächlich stichhaltige Argumente dafür.



  • krümelkacker schrieb:

    Damit solltest Du heutzutage zu der Minderheit gehören, die diese Meinung vertritt. Siehe http://www.research.att.com/~bs/new_learning.pdf

    Nun, ich bin der Meinung, daß jemand, der Programmieren lernen möchte, lernen sollte, wie ein Computer tickt und da ist die Low Level Programmierung in einer High Level Language Ebene wie sie C bietet gerade zu ideal dafür, ohne all zu tief auf Assemblertiefe absteigen zu müssen.

    Char Arrays, Arraygrenzen, Pointer usw., das sind alles elementare Grundbausteine die man für ein besseres Verständnis über die Programmierung erlangen sollte.

    Und wer wirklich eher so wie BS es vorschlägt eine Programmiersprache lernen möchte, der sollte dann schon eher gleich Java und nicht C++ zum Lernen wählen, denn mit Java kann der Neuling dann auch gleich auf die riesige Auswahl an Bibliothektsfunktionen zugreifen, insbesondere auch der Nutzung von GUI Funktionen, wie es BS in seinem Text anführt und dieses bei C++ vermißt.

    Dann noch zum Beispiel der 1. Aufgabe.
    Das was das hier BS anführt ist etwas an den Haaren herbeigezogen.
    Am Anfang reicht ein scanf mit begrenzter Eingabegröße völlig, denn der Anfänger muß erstmal lernen was ne While Schleife ist, was eine Function ist und was der Unterschied zwischen Call by Value und Call by Reference ist.
    All das kann schon genug verwirren.
    Sobald er das im Schlaf beherrscht gelangt er über die Pointerarithmetik sowieso zur Dynamischen Speicherverwaltung mit malloc & co und spätestens dann wird er die im Text erwähnte Aufgabe nicht so falsch machen wie BS.

    Was hier nämlich BS meiner Meinung nach falsch macht, ist daß er im 3. Beispiel der 1. Aufgabe die ganze Stringeingabe nicht einfach in eine eigene Funktion für die dynamische Eingabe von Chararrays packt, denn dann bleibt main sauber und schön wartbar, während die Eingabefunktion dann jederzeit wiederverwendbar ist.

    Man muß also nur wissen, wie man in C am besten programmiert.
    Das zweite Beispiel ist etwas unfair.
    Wem es hier um Performance geht, der schreibt seine eigene Quicksortfunktion und baut den Abschnitt bezügl. der Comparefunktion gleich mit ein, dann spart er sich den Funktionsaufruf von Compare.

    C++ antworter schrieb:

    Noch eine Anmerkung zu Simulationen:
    John Carmack hat sein Doom 3 in C geschrieben.

    Das kaufe ich Dir nicht ab.
    http://en.wikipedia.org/wiki/Id_Tech_4

    Ok, dann habe ich das mit Quake 3 verwechselt.

    Die Quake 3 Engine ist definitiv noch in C geschrieben.

    C++ antworter schrieb:

    Wenn dem so ist, dann brauche ich aber auch kein C++, sondern kann auch gleich Vala als Programmiersprache einsetzen.

    Schreib doch mal etwas, womit man Dich ernst nehmen kann.

    kk

    [/QUOTE]
    Ist doch war.

    Wer in C++ schreibt um den Code dann am Ende vom Compiler in C Code umzuwandeln, anstatt gleich in Assembler oder Maschinencode, der kann sehr wohl dann gleich Vala nehmen, denn Vala macht genau das auch.

    Es bleibt also Fakt, es gibt kaum C++ Compiler für kleine Embedded µC.



  • 314159265358979 schrieb:

    Was für ein Schwachsinn. In C++ programmiert man komplett anders als in C, das Umlernen hat dann oft einen Misch-Stil zur Folge.

    Mit den entsprechenden Büchern hat es keinen Misch-Stil zur Folge und die Grundbausteine wie Schleifen und Funktionen braucht man auch in C++.

    Dein "Schwachsinn" ist übrigens schlechter Diskussionsstil, denn kannst du dir echt sparen.



  • Nur, um wenigstens ein Fünkchen von "Meta-Feedback" zu geben: Nichts von dem, was Du (c++ antworter) geschrieben hast, hat dazu geführt, dass sich mein Standpunkt bzgl C++ / bestem Lernansatz für C++ geändert hat. Das beruht offensichtlich auf Gegenseitigkeit :). Von mir aus gibt es dazu nichts mehr zu sagen.

    Gruß,
    kk



  • C++ antworter, es gibt in C so viele Sprachmittel und Techniken, welche in C++ durch bessere Alternativen abgelöst werden. Viele Leute verwenden diese bei einem Umstieg auf C++ aber weiterhin wegen der Kompatibilität. Wieso sollte man sich auf einmal alles abgewöhnen, wenn es weiterhin funktioniert? Genau hier liegt das Problem, welches man immer wieder schön im C++-Unterforum sieht und welches man beim Direkteinstieg zu C++ nicht hätte.

    Um ein paar Beispiele zu nennen (auch wenn es Leute gibt, welche die folgenden Punkte in C++ benutzen, kommt man generell gut ohne sie aus):

    • Variable Argument Lists
    • Makros für Funktionen und Konstanten
    • void*
    • Manuelle Speicherverwaltung mit malloc() und free()
    • Single-Entry, Single-Exit
    • Rohe Arrays
    • union
    • Zeichenkettenverarbeitung mit C-Strings
    • C-Casts
    • Prefixes als Namensraum
    • Globale Variablen

    Wenn man C lernen will, lernt man C, doch wenn man eh mit dem Hintergedanken anfängt, sich später C++ anzuschauen, ist man besser beraten, gleich damit anzufangen.



  • Hi,

    ich würde den umgekehrten Weg gehen, nämlich gleich C++ lernen mit einem guten C++-Buch, aber parallel dazu noch ein sehr gutes C-Buch (den Kernighan/Ritchie) lesen.
    Selbstverständlich wird man am Anfang Programme schreiben, die man zum größten Teil genau so gut dem C-Compiler anbieten könnte (schleifen, Verzeigungen...), aber man wird sich sicher nicht die Mühe machen noch alles mit Scanf einzulesen, und Felder von Feldern von Zeigern auf Zeiger... sollte man zwar auch verstehen aber möglichst heute nciht merh selber verwenden (es sei denne aus Effizienzgründen).

    Gruß Mümmel



  • Da haben wir wieder - wie so oft - eine unnötige Diskussion C versus C++. Programmieren ist keine Religion, wo man über die einzig richtige Lehre oder Dogmen streiten muss! Ich selbst habe mit C begonnen, weil es C++ noch nicht gab (davor FORTRAN, PL1, PASCAL, Assembler...). Ich scheue mich nicht, einige Dinge weiter in C zu machen. Schliesst sich doch nicht aus, der Compiler macht alles mit und das ist gut so! 🙂



  • Also ich selbst würde mich noch als Einsteiger bezeichnen was C/C++ angeht. Ich habe mit C angefangen und bin jetzt gerade dabei mir C++ mal etwas weiter anzueignen. Genau diesen Weg würde ich auch Neulingen empfehlen. Es ist sicher wahr dass sich mit C++ vieles eleganter als in C lösen lässt, aber mein Ziel war es nicht nur irgendeine Sprache zu lernen mit der ich dann schnell irgendetwas hinzaubern kann ohne zu verstehen was da eigentlich vor sich geht. Zudem glaube ich dass gerade das lernen der Punkte die Nexus an C so kritisiert für mein Verständnis sowohl der Sprache C als auch C++ und der Funktionsweise von Computern im allgemeinen von entscheidener Bedeutung waren. (Nur wer char arrays kennt lernt std::string & std::vector zu schätzen :D)

    Jetzt kann man natürlich argumentieren dass man sich diese Dinge beim C++ lernen doch auch gleich mit beibringen könnte, nur warum lernt man dann nicht erstmal C? Zudem kommt die, meiner Meinung nach, wesentlich steilere C-Lernkurve. C++ bietet so viele und umfangreiche Sprachkonzepte (Klassen, Mehrfachvererbung, Polymorphie, Templates, Überladungen, etc.) dass diese Sprache auf mich als völligen Neuling erstmal sehr erdrückend gewirkt hat. (Hier muss man anmerken dass ich noch Schüler bin und mir alles selbst beigebracht habe, wie das Ganze mit einem Lehrer aussieht weiß ich nicht.)
    Im Gegensatz dazu ist C vom Grundaufbau her eigentlich mehr als simpel. Es gibt nur ein paar Schlüsselwörter, Datentypen, Arrays, Funktionen, Pointer. Man musste also wirklich so gut wie nichts lernen, die Grundfunktionen konnte man ja immer schnell auf < http://www.cplusplus.com/reference/clibrary/ > nachschlagen. Man kommt einfach viel schneller dazu mal irgendetwas zu machen was über "Hello, World" hinausgeht ohne sich gleich ein "In C++ macht man sowas nicht mit xxx sondern mit virtueller Mehrfachvererbung"-Flame abzuholen.

    Und wenn man sich in C sehr sicher fühlt und gute Programme schreiben kann, macht das lernen von C++ doch auch gleich viel mehr Spaß. Das Grundzeugs kann man gleich überspringen, man freut sich über Klassen, Templates und die STL-Container anstatt sie zu verfluchen weil man nichts versteht. Zudem entsteht dass C/C++ Mischmasch meiner Meinung nach auch eher bei Leuten die gleich mit C++ anfangen vor, da diese ja meist C und C++ kaum unterscheiden können. Erst wer auch (mehr oder weniger) die C Konzepte verstanden hat kann diese mit C++ vergleichen und überlegen was jetzt wohl eleganter ist (wobei hier C zugegebenermaßen meistens ziemlich schlecht abschneidet.. ).

    Fazit:
    Erst C, dann C++ und nacher vielleicht noch etwas anderes hört sich doch gar nicht schlecht an 😉

    PS: Zu dem "in dieser/jener Sprache kann man ganz leicht GUIs erstellen".
    Wir arbeiten bei uns im Informatik Unterricht mit Python und letztens haben wir mit tkinter angefangen. Und dann hat mich doch wirklich jemand gefragt ob es nicht möglich wäre den gleichen Code öfter auszuführen, also quasi wieder nach oben zu springen. Als ich dann nach einer "Schleife" gefragt habe kamen nur fragende Blicke. Auf die Frage was denn wohl "window.mainloop()" bewirkt kam die Antwort "der Befehl startet das Fenster". Ich meine, mit C und WinAPI wäre sowas nicht passiert 😃



  • C++ antworter schrieb:

    Mit den entsprechenden Büchern hat es keinen Misch-Stil zur Folge und die Grundbausteine wie Schleifen und Funktionen braucht man auch in C++.

    Die hat C++ auch, ohne sich mit Funktionen rumzuschlagen, die man später (nach den Umstieg) nicht mehr braucht.



  • (Nur wer char arrays kennt lernt std::string & std::vector zu schätzen :D)

    Das glaubst du...
    Es gibt so viele ehemalige C Programmierer, die std::string nicht benutzen, weil sie mal gehört haben, dass es zu langsam ist und sich stattdessen ein eigene Stringklasse bauen.

    Zudem entsteht dass C/C++ Mischmasch meiner Meinung nach auch eher bei Leuten die gleich mit C++ anfangen vor, da diese ja meist C und C++ kaum unterscheiden können.

    Da du ja laut eigener Aussage selbst noch C++ Anfänger bist, lasse dich doch bei deiner Meinungsbildung von erfahrenen C++ Programmierern beeinflussen, die mehrheitlich der Meinung sind, dass ein C/C++ Mischmasch dann entsteht, wenn man vorher C Programmiert und es dann nicht schafft seine Denkweise umzustellen.

    Jemand, der mit einem guten C++ Buch lernt, wird sicherlich nicht anfangen alles prozedural mit void* und Co. zu lösen.

    Das Grundzeugs kann man gleich überspringen, man freut sich über Klassen, Templates und die STL-Container anstatt sie zu verfluchen weil man nichts versteht.

    Was muss man groß verstehen um die STL verwenden zu können? Ein Anfänger wird es wesentlich leichter haben mit std::vector.push_back() zu arbeiten, als sich in C mit malloc() und free() irgendetwas ähnliches nachzubauen.
    Er wird vielleicht nicht verstehen, wie das genau implementiert ist, aber das ist zum Verstehen der zugrundeliegenden Konzepte auch nicht wichtig.



  • Erst C, dann C++ und nacher vielleicht noch etwas anderes hört sich doch gar nicht schlecht an 😉

    Am besten auch mal über den OO-Tellerrand schauen und Haskell, Scheme, etc. lernen.



  • ZumHundertstenMal schrieb:

    Erst C, dann C++ und nacher vielleicht noch etwas anderes hört sich doch gar nicht schlecht an 😉

    Am besten auch mal über den OO-Tellerrand schauen und Haskell, Scheme, etc. lernen.

    Das klingt wie:

    ZHM schrieb:

    Am besten erst mal über den Wissenschafts-Tellerrand schauen und Astrologie, Alchemie, etc. lernen.

    Die einzige Aussage des Satzes bestand in der negativen Nebenbedeutung von "Tellerrand", das war aber nicht nett.


Anmelden zum Antworten