c++

internetsurfer123

Grünschnabel
Hallo ihr Computer Profis!
Ich habe eine Frage: was ist besser? C oder c++?
oder zahlt es sich überhaupt noch aus c zu lernen? Ist es nicht gleich besser man lernt c++, das ist ja die Weiterentwicklung von c.
Für was gibt es denn c überhaupt noch? C++ is ja neuer und deshalb besser und moderner oder?
Außerdem kann man mit c ja nur so MS DOS Programme machen, das braucht man ja nicht mehr! Mit c++ kann man aber schon richtige Programme machen, die dann auch im normalen Windows (7) design sind?
 
Hi

was "besser" ist kommt ganz auf die eigene Meinung und den Anwendungsfall an.

Und nein, C ist nicht von C++ abgelöst. Betrachte es als zwei getrennte Sprachen.
C hat mehr mögliche Einsatzgebiete als C++, nicht weniger, aber C++ ist oft angenehmer zu programmieren
(Klassen und alle anderen Syntaxfeatures, mehr hilfreiche plattformunabhängige Sachen in der Standardlib usw.)
 
Aber kann man mit c ein Programm schreiben, das so ausschaut wie die ganzen anderen Windows Programme (word und so)?
Das impliziert, dass es mit C++ sehr einfach geht.
Das stimmt so nicht. Mit C++ kannst du aber mit Frameworks wie Qt arbeiten, welche den grössten Teil der Arbeit abnehmen.
Aber Dinge wie "Windows 7 Design" kannst du auch mit C erreichen (ein Grossteil der WinApi war und ist in C geschrieben).

Meine Empfehlung: Lerne zuerst C, dann C++. C++ basiert stark auf C (auch wenn es ein bisschen anders verpackt ist), und du kannst problemlos C und C++-Code mischen, wenn du einen C++-fähigen Compiler hast.

Gruss
cwriter
 
http://stackoverflow.com/questions/640657/whats-the-difference-between-c-and-c

Kommt immer drauf an, was man machen will. Meine ganz persönliche Auffassung der Unterschiede, die gerne korrigiert werden kann:

C:
  • Sehr leichtgewichtige Sprache: Wenige Typen und Grundregeln (Grundoperationen, Pointer sind immer *) sowie keywords (typedef)
  • Sehr komplex, wenn grössere Programme entstehen
C++:
  • Wie C, aber völlig anders :p
  • Klassen (im Prinzip erweiterte Structs -> bitte nicht schlagen :()
  • Sehr viele Keywords (inline, virtual, override (c++11) (ja, fakultativ), null_ptr (c++11))
  • Templates
  • Lambdafunktionen (c++11)
  • Inlining (std::function statt void*)
  • Erweiterte Loops (for(auto a : vector) statt for(size_t i = 0; i < vector.size(); i++) vector->...)
  • Durch Vererbung und Klassenhierarchie relativ skalierend bezüglich Grösse des Codes.
  • Typesafety
  • Pointer sind mal reference pointer (&), mal pointer (*) (übrigens kompiliert exakt dasselbe)

Angesichts dessen, dass C++ riesig ist, dennoch aber auf die C Grundgesetze zurückgreift, wäre mein logischer Schluss, zuerst die Grundlagen zu lernen, bevor man sich in die Weiten der Sprache wagt. Zumal man auch in C++11-Zeiten oft auch "normale" C-For-Loops sieht.

Die beiden Sprachen haben mittlerweile nur noch den Buchstaben 'C' gemeinsam.
Dem würde ich widersprechen. Syntaktisch sieht es anders aus, klar. Doch auch C++ hat beispielsweise noch die int main(int argc, char* argv[]), und wehe dem, der nur noch die "automatisch" verwalteten Vektoren kennt, wenn er die Argumente auslesen soll. Und einfach std::vector<char*> v(argv, argv + argc / sizeof(char*)); (ungetestet) lasse ich mal nicht gelten, da es auch Kenntnisse über C-Arrays erfordert.

Mögen die Diskussionen beginnen :p

Gruss
cwriter
 
Hey cwriter

Ich denke anhand von Threadtitel und Frage ist eine Diskussion dazu hier gar nicht mal so falsch.

Inwiefern C und C++ noch ähnlich sind hängt ganz vom Programmierstil ab. Ich für meinen Teil programmiere C++ fast so wie C#. In meinem Code findest du kein einziges new, kein einziges delete. In meinem Code findest du so gut wie keinen einzigen raw pointer. Alles ist in Smartpointer gepackt. Entsprechend sind Sachen wie "Memory leak" oder Zugriff auf ein gelöschtes Objekt für mich absolute Fremdworte in C++. Ok, dass ich im Zusammenspiel mit der Win-API oder mit archaischen Sachen wie der main-Funktion ohne Library gezwungen bin mich in ein paar wenigen Zeilen mit den veralteten Konstrukten 'array' und 'pointer' zu beschäftigen lässt sich wohl kaum vermeiden. Aber dafür gibts ja boost.

Es ist generell bisschen schwer für mich neuen Leuten Tipps zu geben. Als ich mit C++ begonnen habe war dies wirklich noch die Sprache der Memory Leaks, eine Sprache die was "syntactical sugar" anbelangt noch hinter Java lag. Heute sieht Java gegenüber C++ alt aus. Umständlicher, mehr Code, etc. Das Problem ist halt einfach, dass viele Leute, die erst C und dann C++ lernen am Ende nicht C++ programmieren sondern C mit Klassen. Und das ist eine äusserst grauslige Kombination.

Grüsse
Cromon
 
Hallo Cromon

Das Problem ist halt einfach, dass viele Leute, die erst C und dann C++ lernen am Ende nicht C++ programmieren sondern C mit Klassen. Und das ist eine äusserst grauslige Kombination.
Ja, da habe ich auch so meine Schwächen. Andererseits: Was ist denn ein shared_ptr anderes als ein Pointer, der bei Zerstörung des letzten shared_ptr, der auf dasselbe Objekt zeigt, im Destructor automatisch ein delete ptr; ausführt?

Hier sehe ich das "grösste Problem von C++: Es macht sehr viel, das man nicht direkt sieht. Oder wie würdest du "pass by reference" erklären, wenn nicht mit C-Pointern?
Auch ich bin mit C "aufgewachsen" und habe erst danach C++ gelernt. Zuerst auch nur als "C with Classes", dann mit Vektoren (raw data kann sehr mühsam werden), dann sogar mit C++11-Features. Auf der anderen Seite habe ich mir auch sehr grobe Grundkenntnisse in ASM angeeignet, kann also etwa abschätzen, was in der CPU geschieht, was atomic operation ist oder sein kann, was nicht.
Und ich glaube nicht, dass ein bisschen Kenntnis über die Interna schädlich ist.

Aber vielleicht kann sich jemand zu dem Thema äussern, der mit C++ begonnen hat? Würde mich auch interessieren :)

Gruss
cwriter
 

Neue Beiträge

Zurück