Von Cpp nach C



  • Hallo,
    da ich gerne C erlernen würde, um besser in manchen Open Source Projekten mitarbeiten zu können, suche ich nach einer guten Weiterbildungsmöglichkeit.
    Habt ihr damit irgendwelche Erfahrungen? Vielleicht eine Quelle, in der eben vor allem die Unterschiede hervorgehoben werden und nicht nur die Grundlagen ein weiteres Mal erläutert werden.
    Oder soll ich einfach einmal einige C-Projekte durchschauen? Habt ihr da besonders empfehlenswerte? Gibt es in C irgendwelche Unterschiede bezüglich schlechtem Stil?

    Danke schon einmal im Voraus!



  • also meiner meinung nach solltest du alles, was du von c++ her über c zu wissen meinst, vergessen und wirklich von vorne anfangen, weil du da im regelfall ganz anders programmierst und vor allem alles selbst machen darfst.



  • Leider beginnen die meisten Bücher und Tutorials noch einmal ganz von vorne - das Grundverständis der Programmierung habe ich aber ja bereits. Erklärungen zu Schleifen und Verzweigungen brauche ich dementsprechend nicht.
    Kennt ihr da also etwas, das durchaus auch anspruchsvoller und fortgeschrittener ist?
    Englisch oder deutsch, geht beides.



  • Viel mehr als C for C++ Programmers sowie C Tutorial for C++ programmers wirst du nicht finden.

    Hast du denn schon das Wissen der unter "Advanced" stehenden Themen bei learn-c.org?
    Oder du programmierst ein paar der unter C Programming Examples stehenden Aufgaben nach (und vergleichst dann die Lösung).

    Wichtig ist aber auch, die Funktionen der C Standard Library zu kennen, damit man nicht alles wieder selber entwickelt.



  • forwards schrieb:

    das Grundverständis der Programmierung habe ich aber ja bereits. Erklärungen zu Schleifen und Verzweigungen brauche ich dementsprechend nicht.

    ja das sind dann themen, bei denen du gleich die übungsaufgaben machen kannst. außer natürlich, du bist der meinung, dass sich diese übungsaufgaben nicht lohnen.

    aber so von der sache her ist c eben komplett anders.

    int *meinzeiger = malloc(sizeof(int));
    

    funktioniert soweit ich weiß unter c++ z.b. nicht.



  • Wade1234 schrieb:

    int *meinzeiger = malloc(sizeof(int));
    
    int *meinzeiger = malloc(sizeof(*meinzeiger));
    

    Datentyp ändern --> einmal ändern. Vergessen unmöglich.



  • In C++ würde man dafür doch einfach new und decltype nehmen?
    Auch wenn ich decltype zugegebenermaßen seltener als sizeof verwende.

    Wird C11 eigentlich auch häufiger verwendet oder sollte ich das lieber gar nicht lernen?
    Weil irgendwie ist das meiste, was ich so sehe, immer C89 oder C99.



  • Swordfish schrieb:

    Wade1234 schrieb:

    int *meinzeiger = malloc(sizeof(int));
    
    int *meinzeiger = malloc(sizeof(*meinzeiger));
    

    Datentyp ändern --> einmal ändern. Vergessen unmöglich.

    ich wollte eigentlich mehr darauf hinaus, dass nach meinem wissen ein compilerfehler auftritt, wenn man das unter c++ versucht.

    forwards schrieb:

    In C++ würde man dafür doch einfach new und decltype nehmen?
    Auch wenn ich decltype zugegebenermaßen seltener als sizeof verwende.

    Wird C11 eigentlich auch häufiger verwendet oder sollte ich das lieber gar nicht lernen?
    Weil irgendwie ist das meiste, was ich so sehe, immer C89 oder C99.

    es gibt glaube ich nicht einmal richtig bücher über c11 oder c99 und soweit ich weiß gab es für c99 auch ewig keine compiler.
    man braucht das glaube ich auch gar nicht so richtig.



  • Wade1234 schrieb:

    es gibt glaube ich nicht einmal richtig bücher über c11 oder c99

    Am Programmierstil hat sich da auch nichts geändert. Die paar Neuerungen an C kann man (auch im Standard) nachlesen. Zu finden unter der Linkliste für Neulinge: https://www.c-plusplus.net/forum/300567 (oder bei https://de.wikipedia.org/wiki/Varianten_der_Programmiersprache_C#C99)
    C99 hat auch neue Bibliotheksfunktionen gebracht.

    Wade1234 schrieb:

    und soweit ich weiß gab es für c99 auch ewig keine compiler.

    Visual C (oder der C-Teil vom MS C++ Compiler) hat Ewigkeiten C99 nicht unterstützt. DArum wurde C99 kaum genutzt.
    Der GCC konnte das schon sehr früh.
    Aus Kompatibilität hat man beim Programmieren darauf verzichtet.

    Wade1234 schrieb:

    man braucht das glaube ich auch gar nicht so richtig.

    Der einzeilige Kommentar gehört aber auch dazu. 😉



  • Ich empfehle "The C Programming Language". Ist für absolute Programmieranfänger nur was, wenn man besonders clever ist. Da du aber schon programmieren kannst, brauchst du nicht besonders clever sein, um das zu verstehen.

    Ansonsten: Ich lese gerade dieses Buch:
    C als erste Programmiersprache (u.a. von Joachim Goll)

    Ist auch empfehlenswert. Lese einfach die Abschnitte, die du nicht verstehst. Die grundlegenden Abschnitte kansnt du überfliegen oder einfach ignorieren.



  • Du kannst als Anfänger überhaupt keine sachgerechte Einschätzung einer Fachlektüre abgeben.



  • Das nicht, aber ein blindes Huhn findet manchmal auch einen Korn- Ich meine in diesem Falle das blinde Huhn zu sein 😃



  • Du kannst als Anfänger nicht beurteilen, ob du überhaupt ein Korn gefunden hast. Und das reicht natürlich in keinem Fall, sinnvoll auch noch anderen Leuten irgendwas zu empfehlen.



  • forwards schrieb:

    Habt ihr da besonders empfehlenswerte?

    Professionelles C gibt es z.B. zu bewundern unter:
    https://code.woboq.org/

    forwards schrieb:

    Gibt es in C irgendwelche Unterschiede bezüglich schlechtem Stil?

    Ja.
    Der meiste öffentlich zugängliche Code von Lehrern, Fachbuchautoren, Tutorialschreiberlingen und anderen Deppen ist schlechter Stil.



  • Was hältst du eigentlich von meinen Empfehlungen, Wutz, um mal jemanden mit Erfahrung zu fragen?
    Wie kommt es eigentlich, dass du die meisten Fachbuchautoren für untauglich hältst, was das Vermitteln von gutem C angeht?
    Die Frage die sich mir stellt ist nämlich: Wie soll man C sonst lernen? Wenn man alles immer nur querliest, obwohl man keine Ahnung hat, gerade dann können einem doch wichtige Infos entgehen, oder man kann sich an Halbwissen verbrennen...



  • Wutz hat nicht Didaktik studiert. Nur so kann ich mir vorstellen, dass er die fachliche Korrektheit über die didaktische Kompetenz stellt. Denn modern ist es doch, das Lernen zu lernen, die Inhalte sind doch völlig egal.

    Oder habe ich da zu viel von Franz Lemmermeyer gelesen, der sich völlig unverständlicherweise darüber beschwert, dass Mathematik-Schulbücher inzwischen von Didaktikern ohne Mathematikkenntnisse geschrieben werden 😞

    Sorry, wenn das nicht 100% als Antwort passt, aber so haben einige Programmier-Fachbücher doch was von den "modernen" Mathematik-Schulbüchern.



  • Das Problem mit C (und C++) ist, dass man das genau verstehen muss. Ich mach schon ziemlich lang C++, aber ich finde trotzdem immer wieder etwas, wo mir nicht klar ist, wie das genau definiert ist. Entweder schau ich dann im Standard nach, oder es ist mir dann nicht wichtig genug, mich da zu genau reinzudenken. Jedenfalls würde ich mich nicht trauen, ein Buch zu schreiben, zumindest nicht ohne genau zu recherchieren. Und das ist der Unterschied zu den Autoren von C und C++ Büchern. Die haben sich eben getraut, obwohl viele noch oberflächlichere Kenntnisse haben. Man könnte das vielleicht als Selbtüberschätzung von Anfängern sehen. Nach einem halben Jahr oder so denken viele, dass sie C++ verstehen. Einige hören dann auf und schreiben Bücher. Aber rrst wenn man länger und intersiver damit arbeitet, sieht man ein, dass man noch sehr viel zu lernen hat.



  • wob schrieb:

    Denn modern ist es doch, das Lernen zu lernen, die Inhalte sind doch völlig egal.

    Es mag modern sein, aber es ist Bullshit.
    Genau so Bullshit wie jemand der nur fix das kann was ihm eingetrichtert wurde aber sich nix selbst raussuchen/beibringen kann.



  • hustbaer schrieb:

    wob schrieb:

    das Lernen zu lernen

    [...] nix selbst raussuchen/beibringen kann.

    man muss doch erst das eine tun, um dann das andere zu können, oder irre ich da? ob die umsetzung so gut ist, sei mal dahingestellt, aber die idee stimmt doch.



  • hustbaer schrieb:

    wob schrieb:

    Denn modern ist es doch, das Lernen zu lernen, die Inhalte sind doch völlig egal.

    Es mag modern sein, aber es ist Bullshit.

    Ja, natürlich! Und ich werde immer wütend, wenn ich die "modernen" Abituraufgaben, die da so genannt werden, lese. Argh. Ein Glück, dass ich so einen schei... noch nicht hatte. Wir haben noch bewiesen, wir hatten sogar komplexe Zahlen im LK. Bei uns hatten die Verben "angeben, nennen, berechnen, ..." noch keine eingeschränkte Bedeutung.

    Aber heutzutage macht man alles nach irgendeinem Rezept ohne nachzudenken. Übertragen auf das Programmieren nennt sich das "aus Stackoverflow zusammenklöppeln". 👎


Anmelden zum Antworten