Gibt es für einen C++ Programmierer noch Gründe C zu lernen?



  • 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++ hast

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



  • groovemaster schrieb:

    Storm.Xapek.de schrieb:

    Nunja da C eine Untermenge von C++ ist

    Nein, ist es nicht! Punkt.

    *punktwegradier*

    Kannst du da genauer werden? Das hab ich noch nie ernsthaft von jemandem gehört.


Anmelden zum Antworten