C oder C++ - Lohnt es sich noch C zu lernen?
-
volkard schrieb:
lllllllllllllol schrieb:
Ja, aber OOP ist ja eine Art Abstraktionsebene (Abstraktionsebene ist vllt nicht das richtige wort). Systemprogrammierung ist immernoch lowlevel programmierung.
=> Cdu machst gerade den fehler, systemprogrammierung als das zu definieren, was man in c macht.
Du wirst nicht leugnen können, dass sich C++ zu einer höheren Sprache entwickelt hat als C. OOP ist ein provileg einer höheren sprache, wogegen C eher lowlevelmäßig ist. Und die STL tut den rest: Highlevel und bequem!
Ich definiere Systemnprogrammierung mit lowlevel.
Da ich C++ zu highlevel halte, würde ich C für systemprogrammierung vorziehen.
-
llllllllllllllllol schrieb:
Du wirst nicht leugnen können, dass sich C++ zu einer höheren Sprache entwickelt hat als C. OOP ist ein provileg einer höheren sprache, wogegen C eher lowlevelmäßig ist. Und die STL tut den rest: Highlevel und bequem!
du wirst nicht leugnen können, daß man mit c++ grundlegende datenstrukturen der systemprogrammierung sehr fein in klassen packen kann und dabei null zusatzkosten zur laufzeit hat. und das ist was gutes, das programmieren fällt leichter, geht schneller, ist fehlerärmer. als systemprogrammierer wird man natürlich nicht mit std::string oder RTTI um sich hauen.
-
volkard schrieb:
llllllllllllllllol schrieb:
Du wirst nicht leugnen können, dass sich C++ zu einer höheren Sprache entwickelt hat als C. OOP ist ein provileg einer höheren sprache, wogegen C eher lowlevelmäßig ist. Und die STL tut den rest: Highlevel und bequem!
du wirst nicht leugnen können, daß man mit c++ grundlegende datenstrukturen der systemprogrammierung sehr fein in klassen packen kann und dabei null zusatzkosten zur laufzeit hat. und das ist was gutes, das programmieren fällt leichter, geht schneller, ist fehlerärmer. als systemprogrammierer wird man natürlich nicht mit std::string oder RTTI um sich hauen.
Okay, aber wie gesagt: STL ist ja ein fester bestandteil von C++.
Dauernd wird geprädigt, man solle die finger von char* lassen und stattdessen string nehmen.Möglich ist es natürlich in C++ Sytemnah zu programmieren. Fragt sich nur wie es in der Praxis aussieht.
Meine Skepsis kommt wohl daher, dass ich bisher nur in C systemnah programmiert habe. Alles andere wird bei mir in C++ geschrieben.
-
llllllllllllllllllllllol schrieb:
Dauernd wird geprädigt, man solle die finger von char* lassen und stattdessen string nehmen.
jo, schlimm.
Möglich ist es natürlich in C++ Sytemnah zu programmieren. Fragt sich nur wie es in der Praxis aussieht.
es wird zum beispiel bei embedded systems nicht gemacht, weil die entscheidungsträger die gleichen vorurteile haben wie du.
-
volkard schrieb:
llllllllllllllllllllllol schrieb:
Dauernd wird geprädigt, man solle die finger von char* lassen und stattdessen string nehmen.
jo, schlimm.
Möglich ist es natürlich in C++ Sytemnah zu programmieren. Fragt sich nur wie es in der Praxis aussieht.
es wird zum beispiel bei embedded systems nicht gemacht, weil die entscheidungsträger die gleichen vorurteile haben wie du.
Das sind keine Vorurteile.
Normalerweise nutz ich auch eher C++ da es bequemer und teils leistungsstärker ist.
Aber icg finde: C passt sich dem problemgebiet der systemprogrammierung eher besser an als C++ welches sich für highlevel prjekte eignet.
-
lllllllllllllol schrieb:
Ja, aber OOP ist ja eine Art Abstraktionsebene (Abstraktionsebene ist vllt nicht das richtige wort). Systemprogrammierung ist immernoch lowlevel programmierung.
=> CSchau dir mal den Linuxkernel genau an, der is groesstenteils OO, aber in C, weil Linus kein C++ mag

-
farben noch netzwerk, sound, maus
@volkard
Kann es sein, dass du in deiner Programmierer-Laufbahn nicht über den PC-Tellerrand geblickt hast ?
-
Marcin schrieb:
@volkard
Kann es sein, dass du in deiner Programmierer-Laufbahn nicht den PC-Tellerrand geblickt hast ?Dieser Hinweis wurde vom C++ Forumbot eingefügt.
Dieses Posting wurde automatisch erzeugt.
-
lllllllllllol schrieb:
volkard schrieb:
llllllllllllllllllllllol schrieb:
Dauernd wird geprädigt, man solle die finger von char* lassen und stattdessen string nehmen.
jo, schlimm.
Möglich ist es natürlich in C++ Sytemnah zu programmieren. Fragt sich nur wie es in der Praxis aussieht.
es wird zum beispiel bei embedded systems nicht gemacht, weil die entscheidungsträger die gleichen vorurteile haben wie du.
Das sind keine Vorurteile.
Normalerweise nutz ich auch eher C++ da es bequemer und teils leistungsstärker ist.
Aber icg finde: C passt sich dem problemgebiet der systemprogrammierung eher besser an als C++ welches sich für highlevel prjekte eignet.
OOP bezeichnest du als eine höhere Ebene an? OOP gabs doch schon immer.
Auch in C kapselt man die Funktionen zusammen, die ein bestimmes Problem bearbeiten. Zum Beispiel in druckertreiber.c hast du auch nur Funktionen die sich mit dem Drucker beschäftigen.
In C++ hast du dann die Klasse Druckertreiber, die eben nicht nur die Funktionen zusammen hällt, sondern auch die Daten mit denen intern gearbeitet wird. Ausserdem werden die Funktionen verborgen, die nur intern benutzt werden.Nachteile C:
- man kann die Sichtbarkeit der Funktionen nicht beeinflussen
- man hat globale VariablenC++:
Alles was C bietet plus die Vorteile:
- man kann interne Funktionen verbergen
- man kann Daten verbergen
- man hat eine eindeutige SchnittstelleAnsosnten kann man doch C++ wie C benutzen. Niemand zwingt einen Vererbungshirarchien und dynamische Objekte zu benutzen.
Ich frag mich grade wieso C überhaupt noch eingesetzt wird. Wohl wirklich nur weil es noch sehr viel C-Code gibt und vielleicht weil ein C-Compiler kleiner ist als ein C++-Compiler.
Für Highlevel-Projekte eignen sich eher Sprachen wie C# oder Java.
-
DEvent schrieb:
lllllllllllol schrieb:
volkard schrieb:
llllllllllllllllllllllol schrieb:
Dauernd wird geprädigt, man solle die finger von char* lassen und stattdessen string nehmen.
jo, schlimm.
Möglich ist es natürlich in C++ Sytemnah zu programmieren. Fragt sich nur wie es in der Praxis aussieht.
es wird zum beispiel bei embedded systems nicht gemacht, weil die entscheidungsträger die gleichen vorurteile haben wie du.
Das sind keine Vorurteile.
Normalerweise nutz ich auch eher C++ da es bequemer und teils leistungsstärker ist.
Aber icg finde: C passt sich dem problemgebiet der systemprogrammierung eher besser an als C++ welches sich für highlevel prjekte eignet.
OOP bezeichnest du als eine höhere Ebene an? OOP gabs doch schon immer.
Auch in C kapselt man die Funktionen zusammen, die ein bestimmes Problem bearbeiten. Zum Beispiel in druckertreiber.c hast du auch nur Funktionen die sich mit dem Drucker beschäftigen.
In C++ hast du dann die Klasse Druckertreiber, die eben nicht nur die Funktionen zusammen hällt, sondern auch die Daten mit denen intern gearbeitet wird. Ausserdem werden die Funktionen verborgen, die nur intern benutzt werden.Nachteile C:
- man kann die Sichtbarkeit der Funktionen nicht beeinflussen
- man hat globale VariablenC++:
Alles was C bietet plus die Vorteile:
- man kann interne Funktionen verbergen
- man kann Daten verbergen
- man hat eine eindeutige SchnittstelleAnsosnten kann man doch C++ wie C benutzen. Niemand zwingt einen Vererbungshirarchien und dynamische Objekte zu benutzen.
Ich frag mich grade wieso C überhaupt noch eingesetzt wird. Wohl wirklich nur weil es noch sehr viel C-Code gibt und vielleicht weil ein C-Compiler kleiner ist als ein C++-Compiler.
Für Highlevel-Projekte eignen sich eher Sprachen wie C# oder Java.
Warum C verwendet wird? Weil die wichtigsten Betriebsysteme zum großen Teil (bsp : Windows) oder ganz (bsp: Linux) geschrieben sind. Dann käme noch das Thema Microcontroller, bei dem außer Assembler noch C in Frage kommt. Es gibt nunmal für so ziemlich alles einen C compiler. C hat sich halt etabliert.
Und ja: Ich empfinde C++ als high level(also höher als C).
Gründe: Wenn ich zB std:string statt char* nutze, dann kommt dieser Highlevelgedanke schon gut rüber. Und std:string is ja ein fester Bestandteil der Sprache C++. Außerdem ist (meiner Meinung nach) OOP eine höhere Abstraktionsebene. Jaja, mir is klar, dass man auch in C objekt orientiert programmieren kann, nur hat man in C keine Klassen, sondern vllt einen objektorientierten Hintergedanken.
-
llllllllllllol schrieb:
Und ja: Ich empfinde C++ als high level(also höher als C).
Gründe: Wenn ich zB std:string statt char* nutze, dann kommt dieser Highlevelgedanke schon gut rüber. Und std:string is ja ein fester Bestandteil der Sprache C++. Außerdem ist (meiner Meinung nach) OOP eine höhere Abstraktionsebene. Jaja, mir is klar, dass man auch in C objekt orientiert programmieren kann, nur hat man in C keine Klassen, sondern vllt einen objektorientierten Hintergedanken.Alles richtig.
An so manch anderen hier: man kanns auch übertreiben mit dem Paradigmen-Klugscheissen

-
man kann auch sagen: weil es jemanden gibt, der in c ein programm geschrieben hat, das als root ausgeführt es erlaubte, daß fremde leute seinen ganzen server kontrollierten, ist c eine unsichere und gefährliche sprache, eigentlich nur für selbstmörder und masochisten geeignet.
wichtiger: c-programmierer sind durchschnittlich älter als c++-programmierer, also macht c-programmieren einen alt.
aber man sagt es eher selten, weil es unfug ist. hat aber wesentlich mehr berechtigung als diese argumentattion "weil man std::string benutzen kann, taugsts für low level nicht".
-
llllllllllllol schrieb:
Und ja: Ich empfinde C++ als high level(also höher als C).
Gründe: Wenn ich zB std:string statt char* nutze, dann kommt dieser Highlevelgedanke schon gut rüber. Und std:string is ja ein fester Bestandteil der Sprache C++. Außerdem ist (meiner Meinung nach) OOP eine höhere Abstraktionsebene. Jaja, mir is klar, dass man auch in C objekt orientiert programmieren kann, nur hat man in C keine Klassen, sondern vllt einen objektorientierten Hintergedanken.versteh mal den level einer sprache nicht als eine zahl, sondern als ein intervall, was mit seinen grenzen angibt, wie tief und wie hoch man ganz ohne mühe kommt.
dann setzen wie asm mal bei [0;0] an für ganz lowlevel.
ich mag keine obergrenze für levels angeben.und setzen wie mal c an bei [1;10}. c setzt fast bei 0 an, weils man schon fast assembler programmiert, aber nicht bei 0, weil nab doch nicht rohes assembler macht, ein opaar befehle nicht hat, unds hoch bis 10, weil mach schon ordentlich objektorientiert programmieren kann.
dann ist c++ bei [1;15]. c++ geht weiter nack oben im leistungsspektum aber enauso weit nach unten wie c. weiter nach oben gehts, wenn man std::strings benutzt, virtuelle methoden, zugriffsschutz, templates, exceptions. aber das ist alles ganz freiwillig.
java mag bei [3;14] zu suchen sein. gent mangels template-metaprogrammierung nicht so hoch. und setzt viel höher an, man kommt zum beispiel um Object und String ja gar nicht drumherum oder um exceptions.
und visual basic.net auch bei [3;14]. perl bei [7;17].
man kann in c++ ganz genauso ohne umstände low level programmieren wie in c.
-
Marcin schrieb:
farben noch netzwerk, sound, maus
@volkard
Kann es sein, dass du in deiner Programmierer-Laufbahn nicht über den PC-Tellerrand geblickt hast ?kindchen, als ich anfing, gab es noch PCs.
-
llllllllllllol schrieb:
Warum C verwendet wird? Weil die wichtigsten Betriebsysteme zum großen Teil (bsp : Windows) oder ganz (bsp: Linux) geschrieben sind.
Wobei der Anteil in Windows dramatisch abnimmt... bei Vista wird man nicht mal mehr sagen können, daß C einen wichtigen Anteil hat (vielleicht außer dem Bootloader).
-
kindchen, als ich anfing...
Also, wenn ich dein Beitrag richtig verstanden habe, würdest du Sachen wie GUI, netzwerk, sound, maus in den C++ Standard aufnehmen. Das hört sich eben nach nur PC-Programmierung-Denken.
Auf vielen Systemen ist es doch nicht sinnvoll bzw. umsetztbar.
-
Marcin schrieb:
kindchen, als ich anfing...
Also, wenn ich dein Beitrag richtig verstanden habe, würdest du Sachen wie GUI, netzwerk, sound, maus in den C++ Standard aufnehmen. Das hört sich eben nach nur PC-Programmierung-Denken.
Auf vielen Systemen ist es doch nicht sinnvoll bzw. umsetztbar.bisher hat sich noch kein compiler dran gestört etwas aus den standard nicht beherrschen zu können, außerdem kann man ebenen einführen wie 'c++ embedded' und 'c++ pc'
-
Marcin schrieb:
kindchen, als ich anfing...
Also, wenn ich dein Beitrag richtig verstanden habe, würdest du Sachen wie GUI, netzwerk, sound, maus in den C++ Standard aufnehmen. Das hört sich eben nach nur PC-Programmierung-Denken.
Auf vielen Systemen ist es doch nicht sinnvoll bzw. umsetztbar.wenn jemand was mit farbe programmiert und keine alternative läßt, dann legt er damit fest, daß das programm nicht auf einem toaster mit angeschlossenem fernschreiber funktionieren wird.
höfliche menschen werden versuchen, so zu schreiben, daß es auf dem pc automatisch mit farbe compiliert und auf dem toaster mit angeschlossenem fernschreiber ohne. insbesondere soll die farbe nur ein netter zusatz sein, aber ohne farbe soll die sache auch bedienbar sein.
gleiches gilt für die maus und den sound.
und auf rechnern ohne socketes gibts halt keinen multiplayermode und der mit dem pc kann gegen den mit toaster und fernschreiber nicht fern-tic-tax-toe spsielen.
aber der mit dem toaster mit fernschreiber hats immernoch den single-player-mode.
-
DEvent schrieb:
Nachteile C:
- man kann die Sichtbarkeit der Funktionen nicht beeinflussen
- man hat globale VariablenKann man wohl. Funktionen die außerhalb druckertreiber.c nicht sichtbar sein sollen, kommen halt nicht in den Header für externe Einbindungen rein. Und ich will dich nicht erschrecken, aber C++ hat auch globale Variabeln.
volkard schrieb:
java mag bei [3;14] zu suchen sein. gent mangels template-metaprogrammierung nicht so hoch. und setzt viel höher an, man kommt zum beispiel um Object und String ja gar nicht drumherum oder um exceptions.
und visual basic.net auch bei [3;14]. perl bei [7;17].
Magst du vielleicht deine Gedankengänge bezüglich Perl erläutern? Warum soll Java und VB.Net bei 3, Perl aber bei 7 anfangen?
-
minhen schrieb:
Warum soll Java und VB.Net bei 3, Perl aber bei 7 anfangen?
ka. vielelicht fängt perl auch bei 4 an. mir ging es nur dasrtum, daß c++ und c an der selben stelle anfangen.