Gibt es für einen C++ Programmierer noch Gründe C zu lernen?
-
Hi!
Gibt es eigentlich noch Gründe C zu lernen wenn man C++ kann? Gibt es bestimmte Dinge die man mit C machen kann, die aber mit C++ nicht möglich sind?
fg,mocky
-
Manche Leute behaupten, dass man den Linux Kernel ausschließlich in C programmieren kann - weil C++ "just sucks".
-
c und c++ sind von der denkweise her grundverschiedene sprachen.
ich wuerde dir nicht raten, nur eine von beiden zu lernen. du verpasst sonst was.
ich wuerde trotz allem keine von beiden freiwillig waehlen,
wenn es andere alternativen fuer den betreffenden einsatzzweck gibt.
-
mocky schrieb:
Gibt es eigentlich noch Gründe C zu lernen wenn man C++ kann?
IMO gibt es den nicht. Andersrum allerdings schon.
mocky schrieb:
Gibt es bestimmte Dinge die man mit C machen kann, die aber mit C++ nicht möglich sind?
Nein. Und genau das ist auch der Grund, wieso es Unsinn ist C zu lernen, wenn man bereits C++ kann.
-
Da muss ich mich Groovemaster anschließen.
Wenn man in C++ denkt, dann engt einen C nur ein.
-
Nun, C ist mit eine der meistbenutzten Sprachen. Natürlich macht es Sinn auch C zu lernen. Viele Projekte werden nunmal in C realisiert...
-
Ein Dozent von mir sagt immer: "Wenn ihr's wirklich braucht, dann müsst ihr euch in der Praxis sowieso (richtig) damit beschäftigen."
Also wenn du mal irgendwo arbeitest wo Projekte in C realisiert werden, dann wirs du es ganz automatisch lernen (müssen).
-
Es gibt noch einige Anwendungsgebiete, da ist man froh wenn man C hat, und da gibst noch gar keine C++ kompiler fuer.
-
Für Systemprogrammierung eigenet sich C meiner Meinung nach besser, was bracuht man den objekte im Kernel (manche Kernelentwickler würden auch sagen "C++ just sucks")
Für viele andere Projekte eignet sich C++ aber meiner Meinung nach besser, eben überall da wo man gut Klassen bilden kann und diese auch nutzen (Stichwort Spieleprogrammierung).Es ist aber immer nützlich mehere Sprachen zu beherschen (man sollte sie nur nacheinanderlernen damit man nicht durcheinanderkommt, also erstmal mit einer zurechtkommen).
-
Kann einer der C Vertreter mal ein konkretes Beispiel dafür nennen an welche Systemressourcen man mit C rankommt, was man aber mit reinem C++ nicht schafft?
-
Nunja da C eine Untermenge von C++ ist(wenn auch mit kleinen unterschieden),
kann man natürlich alles was man in C machen kann auch in C++, aber dabei musst du eigentlcih auch wieder auf die C funktionen zurückgreifen (ctime...).
-
mocky schrieb:
Kann einer der C Vertreter mal ein konkretes Beispiel dafür nennen an welche Systemressourcen man mit C rankommt, was man aber mit reinem C++ nicht schafft?
weil man mit einem c++ compiler auch wie in c programmieren kann wird's das kaum geben. wer aber gewohnt ist 'in c++ zu denken' und ausgiebig gebrauch von den c++ features macht, wird an einer reinen c-umgebung sich erstmal die zähnchen ausbeissen.
-
mocky schrieb:
Kann einer der C Vertreter mal ein konkretes Beispiel dafür nennen an welche Systemressourcen man mit C rankommt, was man aber mit reinem C++ nicht schafft?
sowas gibt es an sich nicht, denn mit C++ kann man im Prinzip auf die selben Bibliotheken von C (glibc) zugreifen und linken. Ich weiß nicht, wie Systemprogrammierung unter Windows aussieht, aber unter Unix ist es besser gleich C zu nehmen, weil das System an sich in C geschrieben wurde und keine C++ Strukturen beinhaltet. Deswegen ist es so, wenn du Systemprogrammierung mit C++ betreibst, dann ist letzten Endes C Programmierung und lässt den C++ Compiler C Code übersetzen, weil du nur C Strukturen zur Verfügung hast und somit praktisch nur i C den Code schreiben kannst. Klar kannst du dir eigene Klassen definieren, aber du wirst die Klassen auf C structs runterprogrammieren, weil die System Routinen keine C++ Strukturen beherrschen.
C++ generiert in der Regel immer größere Binaries, und wenn du für ein System programmierst, welches nur begränzt Speicher hat, wie bei Microcontrollern oder ähnliche Geschichten, dann ist es von Vorteil, wenn du schlanke Binaries erzeugen kannst, und C erzeugt in der Regel schlanke (auf jeden Fall viele kleinere als C++) Binaries.
-
Ist es aber nicht so, dass durch den Einsatz von Klassen auf bereits programmierte Codeteile zurückgegriffen wird, womit der benötigte Speicherplatz verringert wird, da nich alles doppelt und dreifach geschrieben wird?
-
in gewisser weise schon aber man kann doch bei C wiederum auch funktionen definieren diem an dann wieder verwendet
gReeTz Bigzed
-
Ja schon. Aber angenommen, du hast ne Menge verschiedener Strukturtypen, auf die eine bestimmte Operation angwendet werden soll, die bei allen ziemlich gleich ist. Aufgrund verschiedener Typen kann man das nicht mit einer Fkt. lösen, sondern muss mehrere schreiben (für jeden Typen eine). Da ist ein OO-Ansatz weniger speicherintensiv.
mfg
Xul
-
ich weiß wirklich nicht, wie die Compiler so etwas in der Tat umsetzen. Aber rede nur von meinen eigenen Erfahrungen mit C und C++. Z.b:
#include <stdio.h> int main(void) { printf("Hallo\n"); return 0; }
und
#include <iostream> int main(void) { std::cout << "Hallo" << std::endl; return 0; }
gleiche Funktionalität
und hab so kompiliert:
$ gcc hello.c -o hello-c $ g++ hello.cpp -o hello-cpp
und ls sagt
supertux@supertux:~/tmp> ls hello-c* -rwxr-xr-x 1 supertux users 6.3K May 2 22:25 hello-c -rwxr-xr-x 1 supertux users 8.5K May 2 22:26 hello-cpp
ganze 2.3 KB Unterschied. Mag hier wenig sein, aber für große Projekte kann es zu einigen MB Unterschied kommen. Und selbst die Geschwindigkeit ist bei dem C++ minimal langsam
supertux@supertux:~/tmp> time ./hello-c Hallo real 0m0.001s user 0m0.000s sys 0m0.000s supertux@supertux:~/tmp> time ./hello-cpp Hallo real 0m0.007s user 0m0.000s sys 0m0.004s
Und in manchen Anwenungsbereichen kann das sehr wichtig werden.
-
Nun gut, da haste dir grad die "fetten" iostreams rausgesucht.
Aber schon alleine der Luxus einfach alles an cout <<en zu können wäre mir das wert.
Außerdem kannst du deine Binaries ja auch noch strippen.
-
hehejo schrieb:
Außerdem kannst du deine Binaries ja auch noch strippen.
klar kannst du das, aber sicherlich auch C Binaries, oder?
Ich mein, wenn du C++ immer benutzen willst, ist deine Sache. Keine Sprache ist universal anwendbar, im Sinne, dass sie überall eingsetzt werden kann, und C++ kannst du eben nicht immer benutzen, das sollte dir klar sein. Ich meide die C++ Programmierung, ich mag C viel mehr. Aber wenn ich Klassen oder Vektoren, Map, usw. brauche, dann benutze ich C++.
-
net schrieb:
mocky schrieb:
Kann einer der C Vertreter mal ein konkretes Beispiel dafür nennen an welche Systemressourcen man mit C rankommt, was man aber mit reinem C++ nicht schafft?
weil man mit einem c++ compiler auch wie in c programmieren kann wird's das kaum geben. wer aber gewohnt ist 'in c++ zu denken' und ausgiebig gebrauch von den c++ features macht, wird an einer reinen c-umgebung sich erstmal die zähnchen ausbeissen.
Stimmt ;-), besonder wenn man eine Software fuer den PC mit C++ geschrieben hat und dann die selbe funktionallitaet auf DSP mit reinem C Compiler umsetzten muss.
->Gibst Software die eine C++ klasse in reinen C code automatisiert umschreibt?