C Lernen



  • Nathan schrieb:

    bindingwriter schrieb:

    Nathan schrieb:

    es gibt aber keinen* rationalen Grund für C++ gegenüber C.

    1. Wenn du eine C ABI brauchst. Du könntest jede Datei in ein extern "C" {} wrappen. Wenn sowieso die ganze Schnittstelle C-kompatibel bleiben muss, dann kannst du dir zwar schon überlegen C++ zu verwenden, aber in C ist das weniger Aufwand.

    Trotzdem kann man die Implementierung in C++ schreiben, die wird dann einfacher. Insbesondere bei Bibliotheken mit kleinem Interface aber Unmenge an Implementierung (z.B. Interpreter).

    Trotzdem kann es bei grossem Interface und wenig Implementierungslogik von Vorteil sein, C zu verwenden. Ist eine Nische, aber kann vorkommen.

    Nathan schrieb:

    bindingwriter schrieb:

    Marthog schrieb:

    Das nervige ist aber, dass in C jedes kleine prograemmchen seine eigenen verketteten listen, hastables und manchmal auch noch eigene strings und dynamische arrays mitbringt, weil es dank fehlender generics kaum universell brauchbare standardlibraries gibt.

    Es ist sehr einfach, generische verlinkte Listen zu schreiben. Nur können C++-Programmierer das nicht in C, weil sie intrusive Listen verlernt haben. Schau im Linux-Kernel nach, wie man verlinkte Listen generisch macht.

    Ich glaube die meisten guten C++ Programmierer können verkettete Listen im Schlaf schreiben. Der Punkt ist aber, dass diese Dinge nicht in der Standardbibliothek sind. Die C-Standardbibliothek ist extrem klein.

    Man schreibt doch nicht alles selbst. Wer in C nur die Standardbibliothek verwendet, hat dazu vielleicht Gründe (µC), aber es ist durchaus möglich eine fertige generische verlinkte Liste aus einer Bibliothek zu holen.
    (Und ich schrieb oben nicht, dass C++-Programmierer keine verlinkte Liste schreiben können, sondern gar nicht wissen, was eine intrusive Liste ist)



  • bindingwriter schrieb:

    Nathan schrieb:

    Trotzdem kann man die Implementierung in C++ schreiben, die wird dann einfacher. Insbesondere bei Bibliotheken mit kleinem Interface aber Unmenge an Implementierung (z.B. Interpreter).

    Trotzdem kann es bei grossem Interface und wenig Implementierungslogik von Vorteil sein, C zu verwenden. Ist eine Nische, aber kann vorkommen.

    In der Hinsicht muss ich dir rechtgeben. Allerdings muss man für C-Header für C++-Kompatibilität sowieso extern "C" drumherum packen, also ist das nicht viel anders als in C++.

    Nathan schrieb:

    Ich glaube die meisten guten C++ Programmierer können verkettete Listen im Schlaf schreiben. Der Punkt ist aber, dass diese Dinge nicht in der Standardbibliothek sind. Die C-Standardbibliothek ist extrem klein.

    Man schreibt doch nicht alles selbst. Wer in C nur die Standardbibliothek verwendet, hat dazu vielleicht Gründe (µC), aber es ist durchaus möglich eine fertige generische verlinkte Liste aus einer Bibliothek zu holen.

    Trotzdem ist das dann mehr Aufwand. Ich denke da jetzt an Beispielprogramme oder so ein Programm, was mal schnell eben geschrieben werden muss. Es direkt dabei zu haben, ohne Bibliotheken, ist da von Vorteil. Aber generell hast du recht.
    Und mit generisch meinst du void*? Ist imo nicht ganz so toll wie Templates o.ä.

    (Und ich schrieb oben nicht, dass C++-Programmierer keine verlinkte Liste schreiben können, sondern gar nicht wissen, was eine intrusive Liste ist)

    Ich hoffe doch sehr, dass das nicht stimmt. Ansonsten muss ich Torvalds Statement darüber, dass C++ immerhin die Nichtskönner aus C raushält, leider zustimmen.



  • bindingwriter schrieb:

    Es ist sehr einfach, generische verlinkte Listen zu schreiben. Nur können C++-Programmierer das nicht in C, weil sie intrusive Listen verlernt haben. Schau im Linux-Kernel nach, wie man verlinkte Listen generisch macht.

    Ich kann verkettete listen machen. Nur in den meisten Faellen lohnen sie sich nicht, weil z.B. std::deque in der Komplexitaet gleich, aber sehr viel cache-effizienter ist. Die C programmierer machen aber munter weiter ihre Listen, weil sie so schoen einfach zu implementieren sind. Ich habe sogar mal gesehen, dass listen fuer stacks eingesetzt werden, die Anwendungsgebiete fuer vector und deque schlechthin.

    Ich habe mir in den letzten Tagen den Sourcecode von zsh und manchen lxde-programmen mal angeschaut und den Eidnruck, dass man teilweise bis zur Haelfte des Codes sparen koennte, wenn man nur die C++-standard library haette.

    bindingwriter schrieb:

    Man schreibt doch nicht alles selbst. Wer in C nur die Standardbibliothek verwendet, hat dazu vielleicht Gründe (µC), aber es ist durchaus möglich eine fertige generische verlinkte Liste aus einer Bibliothek zu holen.

    Dabei ist man aber nicht immer so schnell. Das klassische Beispiel ist wohl qsort vs. std::sort. qsort arbeitet mit funktions-pointern und void*. Das bedeutet erstens unuebersichtliches casten zum anderen koennen die Funktionspointer nur sehr schwer geinlined werden. Bei std::sort hingegen uebergibt man ein functor-object oder nutzt den Vergleichsoperator und das kann problemlos zur compilezeit eindeutig zugeordnet und geinlined werden.



  • Ohne jetzt auf eure pseudoakademischen Beiträge einzugehen:

    Jeder der programmieren will sollte auch etwas Ahnung davon haben was hinter dem Vorhang passiert. Da ist C wesentlich geeigneter als C++.



  • Hi,
    also ich habe jetzt hier mal mit gelesen. Seit mir nicht böse aber schweifen wir nicht zu sehr vom Thema ab?? Klar gibt es gründe Programmiersprache x Programmiersprache Y vor zu ziehen und umgekehrt auch. ich möchte trotzdem ganz gerne erst einmal C lernen und wenn ich diese halbwegs vernünftig vertshe/behersche meine ersten Programme geschrieben habe, dann kann ich immer noch C++ lernen.
    Also zurück zum eigentlichem Thema wer kann mir welches Buch empfehlen und warum?



  • n122vu schrieb:

    Seit mir nicht böse aber schweifen wir nicht zu sehr vom Thema ab??

    Ist leider irgendwie Standard hier. Viele wollen mit ihrem fantastischen Wissen prahlen. Hab das auch schon mehrfach bemängelt, ist aber so.

    Einen guten Tip für ein gutes Buch kann ich dir leider auch nicht geben. Sorry.



  • Wenn du C brauchst, dann lerne es. Wenn du C++ brauchst, dann lerne es. Wenn du Java brauchst, dann lerne es. Wenn du Python brauchst, dann lerne es.

    Wo ist das Problem?



  • Ihr versteht glaub ich die Frage nicht so ganz oder?? naja auch egal der Theread kann geschlossen werden, werde diese Frage in nem anderen Forum stellen!



  • n122vu: Lass dich nicht aergern. Das Wikibook geht schon in Ordnung, zumindest die englischsprachige Version davon (kenne die deutsche nicht).

    Schau dir vielleicht auch mal das hier an, das ist ebenfalls gratis zugaenglich und in meinen Augen recht gut:
    http://c.learncodethehardway.org/book/

    An kostenpflichtigen Buechern wurden mir mal die beiden hier empfohlen (vor allem das erste):

    C Programming | ISBN: 0393979504

    21st Century C: C Tips from the New School | ISBN: 1491903899



  • hi, danke für deine Antwort werde mir die besagten Bücher dann mal anschauen und insbesondere bei den Kostenpflichtigen die Rezensionen mal anschauen.


Anmelden zum Antworten