Gibt es für einen C++ Programmierer noch Gründe C zu lernen?
-
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?
-
supertux schrieb:
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
dann übersetz mal deinen c-code (das mit dem printf) mit 'nem c++ compiler - du wirst kaum einen unterschied mehr feststellen.
supertux schrieb:
Ich meide die C++ Programmierung, ich mag C viel mehr. Aber wenn ich Klassen oder Vektoren, Map, usw. brauche, dann benutze ich C++.
hey, das sehe ich auch so
Flow_cplus schrieb:
->Gibst Software die eine C++ klasse in reinen C code automatisiert umschreibt?
kannste von hand machen
wenn du in c++ hastclass X { int data; ... void method (void) { ... } .... }; ... X x; x.method(); ...
machste z.b. so in c
struct X { int data_1; ... }; ... void method (struct X *x) { ... } ... struct X x; method (&x); ...
-
Storm.Xapek.de schrieb:
Nunja da C eine Untermenge von C++ ist
Nein, ist es nicht! Punkt.
@supertux
Dein Beispiel mit den Streams ist ja schön und gut, aber man weiss ja, dass diese recht grosse Binaries erzeugen. Das ist aber kein Problem der Sprache ansich, sondern liegt vielmehr an der imo schlechten Definition und Implementierung der Streams. Theoretisch sollten diese weniger Speicher verbrauchen und schneller arbeiten als C's ...printf Funktionen (was ganz einfach daran liegt, dass die Typinformationen bereits zur Complietime feststehen und nicht erst geparst werden müssen). Die Realität sieht aber leider anders aus.
Und an die C Programmierer hier (zu den ich ja auch gehöre), was hindert euch daran, einen Systemkernel mit C++ zu programmieren, genauso wie ihr das mit C machen würdet? Ihr hättet sogar noch einige Annehmlichkeiten mehr, wie zB Templates. Und ich bezweifle auch, dass die Compiler/Linker dann grossartig andere Binaries erstellen als reine C Compiler. Ihr müsst in C++ OO ja nicht verwenden, das ist lediglich _eines_ der Paradigmen. Ihr könnt genauso gut strukturiert damit arbeiten. Und diese "C versaut dir deinen C++ Stil" oder "wenn du mit C++ programmierst, fehlt dir das Verständnis für C" Argumente, die ich immer wieder höre, sind schlichtweg absoluter Käse. Erstmal ist das individuell unterschiedlich. Für Leute, die schon länger Erfahrung in C und/oder C++ haben, ist das sicherlich weniger ein Problem als für Anfänger. Und zweitens, es soll ja Leute geben, die auch mehrere Programmiersprachen können. Warum soll es also nicht möglich sein, innerhalb einer Programmiersprache mehrere Paradigmen zu beherrschen? Da ich selbst den Schritt irgendwann von C nach C++ gemacht habe, ohne dabei C aufzugeben, kann ich da aus eigener Erfahrung sprechen. Und plapper nicht irgendwelche Pseudo-Argumente nach.
-
groovemaster schrieb:
was hindert euch daran, einen Systemkernel mit C++ zu programmieren, genauso wie ihr das mit C machen würdet? Ihr hättet sogar noch einige Annehmlichkeiten mehr, wie zB Templates.
mich hindert daran, dass ich den code dann überall nicht einsetzen kann, wo nur ein c aber kein c++ compiler zur verfügung steht. da bleib' ich lieber gleich bei c und freue mich über jeden error wenn ich mal 'ne variable zwischen zwei anweisungen definiert habe.