C oder C++ - Lohnt es sich noch C zu lernen?



  • 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 Variablen

    C++:
    Alles was C bietet plus die Vorteile:
    - man kann interne Funktionen verbergen
    - man kann Daten verbergen
    - man hat eine eindeutige Schnittstelle

    Ansosnten 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 Variablen

    C++:
    Alles was C bietet plus die Vorteile:
    - man kann interne Funktionen verbergen
    - man kann Daten verbergen
    - man hat eine eindeutige Schnittstelle

    Ansosnten 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 Variablen

    Kann 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.



  • DEvent schrieb:

    Nachteile C:
    ...
    - man hat globale Variablen

    Es ist ein Nachteil globale Variablen zu haben? wtf? 😮



  • Ok, mich stört ja auch nur, dass du Perl höher ansetzt und das auch noch so extrem höher.



  • TactX schrieb:

    Es ist ein Nachteil globale Variablen zu haben? wtf? 😮

    Es ist kein Nachteil, globale Variablen zu haben. Es ist ein Nachteil, sie ausschließlich zu haben!

    @minhen
    Zum Thema Verbergen: Da wären wir wieder bei der leidigen Diskussion über das Für und Wider von Header-Dateien. Jedenfalls bietet C++ einen meiner Meinung nach eleganteren Weg, Variablen zu verbergen.



  • Reyx schrieb:

    TactX schrieb:

    Es ist ein Nachteil globale Variablen zu haben? wtf? 😮

    Es ist kein Nachteil, globale Variablen zu haben. Es ist ein Nachteil, sie ausschließlich zu haben!

    Da stimme ich zu. Nur hat DEvent das nicht gesagt. Immer wieder lustig wie man sich Argumente zurechtlügt.



  • Reyx schrieb:

    TactX schrieb:

    Es ist ein Nachteil globale Variablen zu haben? wtf? 😮

    Es ist kein Nachteil, globale Variablen zu haben. Es ist ein Nachteil, sie ausschließlich zu haben!

    Kann mir mal jemand erklären, was eine globale Variable in C oder C++ sein soll? Ich kann keine finden.

    void f() { test = 3; }
    int test;
    

    klappt nicht, also ist test offenbar keine globale Variable, weil in f nicht sichtbar. Abgesehen davon gibt es sogar in C Möglichkeiten, die Sichtbarkeit zu begrenzen ('static').



  • Marc++us schrieb:

    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).

    Deswegen ist Windows Vista auch total verbugt *g*.

    @volkard: Aber wenn man in C OOP programmiert dann hat man (wie ich bereits sagte) höchstens einen objektorientierten Hintergedanken, wobei in C++ OOP vollkommen umgesetzt wird, sprich die Sprache unterstützt OOP auch mit Schlüsselwörtern.

    Klar muss man in C++ nicht OOP programmieren...klar kann man in C++ genauso lowlevel programmieren wie in C, aber dann ist es fast schon wieder C. 🙂



  • TactX schrieb:

    Reyx schrieb:

    TactX schrieb:

    Es ist ein Nachteil globale Variablen zu haben? wtf? 😮

    Es ist kein Nachteil, globale Variablen zu haben. Es ist ein Nachteil, sie ausschließlich zu haben!

    Da stimme ich zu. Nur hat DEvent das nicht gesagt. Immer wieder lustig wie man sich Argumente zurechtlügt.

    Es ist ein riesengroßer Nachteil Variablen global zu definieren. Da man keine Möglichkeit hat, diese z.B. readonly zu machen, könnte man theoretisch den Wert dieser Variable in einem beliebigen Codeteil ändern.
    zB in druckertreiber.c ist jetzt eine globale Variable DruckerZeile.
    in joistick.c könnte ich jetzt DruckerZeile verändern und damit den ganzen Druckerjob kaputt machen.
    Gut, ist ein schlechtes Beispiel aber mir fällt grad kein besseres ein.

    Aufjeden Fall bietet C++ mit Klassen ein weitaus bessere Möglichkeit Daten und Methoden zu kapseln und ihre Sichtbarkeit zu steuern.

    Seit wann ist die STL ein fester Bestandteil von C++ ? STL ist eine einfach Bibliothek, wie iostream, math, usw, benutzt es oder lass es.

    Was sind den die achsotolle Vorteile von C ?



  • STL ist Standard C++, nutzt es oder mach weiter C


Anmelden zum Antworten