Über die Notwendigkeit von C (Anfängerfrage)



  • Hi Leute,
    da ich seit kurzem den Eisntieg in C++ gewagt habe, ohne auch nur eine Zeile C programmiert zu haben, stellt sich mir folgende Fragen:

    Ist es sinnvoll, C zu lernen, wenn man C++ kann (sofern ichs denn mal kann 😉 )?

    Verwirrt mich als C++-Kenner C oder kann man alles was man in C gelernt hat, auch bei C++-Programmen anwenden? (das es umgekehrt nicht so ist, weiß ich)

    Wenn ich denn C lerne, soll ich mir dann ein Einsteigerbuch zulegen oder kann ich durch das Können von C++ bereits die "Grunddinge" von C?

    Für eure weiterhelfenden Antworten vielen Dank 😉



  • ne, es ist sogar besser kein C davor gelernt zu haben.

    meistens verwirren C Kentnisse beim lernen von C++ nur.

    wenn du C++ kannst, musst du C immer noch lernen - nicht die syntax, sondern das programmieren.
    du loest ein problem in C++ ganz anders als in C

    da ich C vor C++ gelernt habe, kann ich dir aber keinen rat geben, wie du C am besten lernst...



  • Danke 🙂



  • Allerdings sind viele APIs (WinAPI, Posix, OpenGL, bei DirectX weiß ich es nicht) nicht in C++ sonderen in C implementiert. Das heißt natürlich nicht, daß man die API nicht in C++ Programmen anwenden kann, nur ist es etwas schwieriger und umständlicher. Ein bißchen C Kenntnisse sind also auch nicht verkehrt.



  • Ich finde man kann auch gleich C++ lernen und das empfehlen sogar viele Autoren und erfahrene Programmierer. Ich lerne im Moment auch C++, ohne C zu kennen, mit C++ hat man ja auch C drauf. Aber ob es schwerer ist oder nicht weiß ich nicht. Ich habe davor PHP gelernt (objektorientiert) und habe es jetzt halt gut(?) drauf, deswegen fällt mir C++ nicht gerade schwer.



  • Strogij schrieb:

    Ich finde man kann auch gleich C++ lernen und das empfehlen sogar viele Autoren und erfahrene Programmierer.

    Stimmt, hat auch Shade oben gemeint.

    Strogij schrieb:

    ...mit C++ hat man ja auch C drauf.

    Stimmt nicht.

    der_Spekulant: Grundsätzlich ist es immer sinnvoll den eigenen Horizont (mit neuen Programmiersprachen) zu erweitern, so auch hier.

    If all you've got is a hammer, everything looks like a nail.



  • nman schrieb:

    der_Spekulant: Grundsätzlich ist es immer sinnvoll den eigenen Horizont (mit neuen Programmiersprachen) zu erweitern, so auch hier.

    OK, es ist natürlich sinnvoll, wenn man sich auf C oder C++ am Anfang eines Programms einigt :D, aber C++ ist doch viel interessanter als C 🙄



  • OK, es ist natürlich sinnvoll, wenn man sich auf C oder C++ am Anfang eines Programms einigt , aber C++ ist doch viel interessanter als C

    Sicher? Hast du schon mal richtig schön mit pointern rumgewurschtelt? DAS ist interessant 😉
    Und gerade für diesen Bereich habe ich mir damals ein C Buch gekauft, weil da viel mehr darauf eingegangen wird/werden muss. Nachdem ich ein weilchen mit C gearbeitet hab hab ich den Sinn der Pointer auch verstanden *g*
    Also konnt ich besser in C++ weiter machen.

    Also ich würde empfehlen mit C++ anzufangen, allein wegen der OOP, die gestalltet sich nämlich auch als recht knifflig am anfang (vorallem wenn man voher mit Basic/TP und C gearbeitet hat). Für tiefere Kenntnisse ist C aber unschlagbar. *meinebescheidenemeinung*



  • Hm, wenn man C++ kann und dann C lernt ist das einzig neue doch die C-Funktionsbibliothek, oder?
    Ich weiß gerade nicht, was da sonst noch sein soll. 😕

    MfG MAV



  • Mis2com schrieb:

    Ich weiß gerade nicht, was da sonst noch sein soll. 😕

    strukturierte programmierung?
    ein völlig anderes herangehen an probleme? lösungen werden anders aufgebaut, andere techniken verwendet, etc.



  • strukturierte Programmierung ist in C eigentlich unüblich 😉



  • "da ich seit kurzem den Eisntieg in C++ gewagt habe"

    Ich würde mir von C die printf-Funktionen und die diesbezügliche Formatierung anschauen. Das kommt z.B. in der Windows-Programmierung vor.
    Unterschied C-/C++-cast: (int)typ int(typ) static_cast<int>(typ) ...
    Konstanten mit #define in C anstelle const.

    C++ bietet mehr als C: Templates, STL, OOP, ...



  • Ich würde zuerst C lernen(so habe ich das auch gemacht), dann ist der Einstieg
    einfacher. Man lernt C++ viel leichter, wenn man vorher in C programmiert hat.
    Ich spreche aus Erfahrung!

    Gruß Crabbe



  • Konstanten mit #define in C anstelle const.

    [Klugscheissermodus][Korintenkackermodus] 🤡
    #define Makros sind in dem Sinne keine Konstanten, sondern Textersetzungsanweisungen. Im Speicher wird dafür kein Speicherplatz angelegt. Stattdessen werden durch den Präcompiler im Quelltext die Stellen, an denen ein Makroname erscheint durch den damit verknüpften Text ersetzt.
    Der Quelltext

    #define PI 3.1415
    ...
    float kreisumfang = 2 * radius * PI;
    

    sieht nach dem Präcompilerdurchlauf dann so aus

    float kreisumfang = 2 * radius * 3.1415;
    

    #define verhält sich also prinzipiell wie eine Konstante, es ist aber eigentlich keine.
    [/Korintenkackermodus][/Klugscheissermodus]



  • Bashar schrieb:

    strukturierte Programmierung ist in C eigentlich unüblich 😉

    hab ich wieder strukturierte programmierung mit etwas anderem verwechselt?
    nur leider habe ich keine ahnung mit was 😞

    bitte aufklaeren.



  • Du meinst wahrscheinlich die prozedurale Programmierung.



  • Harrison Bergeron schrieb:

    Du meinst wahrscheinlich die prozedurale Programmierung.

    ah, danke!
    das wirds wohl sein.

    kann mich dann mal kurz einer aufklaeren was der unterschied zwischen
    strukturierter und prozeudraler ist?
    ich weiss, ich sollte das wissen... aber ich hab mich nie dafuer interessiert :o



  • Shade Of Mine schrieb:

    Harrison Bergeron schrieb:

    Du meinst wahrscheinlich die prozedurale Programmierung.

    ah, danke!
    das wirds wohl sein.

    kann mich dann mal kurz einer aufklaeren was der unterschied zwischen
    strukturierter und prozeudraler ist?
    ich weiss, ich sollte das wissen... aber ich hab mich nie dafuer interessiert :o

    Im wesentlichen bedeutet strukturierte Programmierung Single-Entry-Single-Exit, sowie gewisse Anforderungen an eine Sprache:

    • Sequenziell
    • Selektion (if, switch)
    • Iteration (for, while)

    Keine GOTOS!

    Soweit ich mich erinnern kann. Prozedurale Sprachen sind Sprachen der 3. Generation, also weder Maschinensprache, noch Assembler, sondern COBOL, FORTRAN, Algol, C, ...

    Sie müssen anstelle eines GOTOS so etwas wie Funktionen in C unterstützen. Also Sprung in eine Funktion/Prozedur mit anschließendem Rücksprung. Sehr schön in Cobol

    PROCEDURE-DIVISON.
    PERFORM VORLAUF
    STOP RUN.
    VORLAUF.
    BLBLA
    BLBLA
    BLBLA.

    HTH
    Tobias



  • Prozedurale Programmierung heißt, dass die Prozedur als hauptsächliches Abstraktionsmittel eingesetzt wird: Was muss das Programm TUN, um das Problem zu lösen? C, Pascal, Scheme sind hier Vertreter.

    Strukturierte Programmierung ist ein Dogma, das verlangt, dass Programmabläufe ausschließlich aus Konstrollstrukturen mit einem Eingang und einem Ausgang bestehen. D.h. grob gesagt kein goto, kein break, kein continue, kein return (ausser am Ende der Funktion), keine Exceptions. (Wobei ich schon manchmal gehört habe, dass eine Schleife, die ausschließlich in der Mitte terminiert wird (in C++: for(;; ) { do1(); if (c) break; do2(); } ebenfalls erlaubt ist). Das ganze basiert meines Wissens auf der Anfang der 60er gemachten Beobachtung, dass GOTO böse ist (Dijkstra: "GOTO statement considered harmful") und einem Beweis, dass sich beliebige Programme mechanisch in eine strukturierte Form überführen lassen.



  • oh, danke! 👍


Anmelden zum Antworten