Mit C++ kenntnissen C lernen



  • Ich Programmiere schon eine weile mit C++. Leider sind Sachen wie Socket oder WINAPI in C geschrieben. Das stellt mich immer wieder vor Probleme, deswegen habe ich mir gedacht ich lerne C. Brauch ich dafür extra ein Buch zu kaufen oder gibt es auch etwas Gutes als kostenloses PDF ?

    Ich will nicht wieder etwas wie C++ von A bis Z in die Hände bekommen 😞



  • Ja dann Vorsicht, es gibt vom gleichen Autor auch C von A-Z.

    Ein reines C Lehrbuch wäre
    Prata: C Primer Plus (5th Ed)
    http://www.amazon.de/C-Primer-Plus-Stephen-Prata/dp/0672326965

    Mit Betriebssystem-Anteilen auch für Win:
    Herold: C-Programmierung: Unter Linux, UNIX und Windows
    http://www.amazon.de/C-Programmierung-Unter-Linux-UNIX-Windows/dp/3938626224


  • Mod

    Ich sag mal: Das meiste was C angeht, solltest du schon wissen, wenn du C++ kannst. Guck dir C-Strings und die Feinheiten von Arrays an, dann vielleicht noch den Anhang im C++-Standard, der die Unterschiede zwischen C und C++ aufzählt. Dann versuch in C genau so sauber zu programmieren wie man es in gutem C++ macht. Also definier genau, wo die Verantwortung für deine Daten liegt, prüfe Rückgabewerte, trenne Aufgaben.



  • Das ist das Schöne an C++ Compilern, man kann einzelne Programmteile jederzeit in Native C schreiben. Und wie du sagst, z.B. bei WinApi und anderem muss man das für die Schnittstelle einhalten. Wie SeppJ schrieb, sind die zu beachtenden Dinge nicht gewaltig. Deswegen brauchst du kein Buch und kein neues Lernen!





  • CCCCXOR schrieb:

    Ich Programmiere schon eine weile mit C++. Leider sind Sachen wie Socket oder WINAPI in C geschrieben. Das stellt mich immer wieder vor Probleme,..

    Magst du mal erläutern, was das für Probleme sind?

    Unter Windows programmiert man am besten mit dem nativen Compiler - MSVC++, ein guter C++-Compiler und ein veralteter (weil nur C89 fähiger) C-Compiler, der auch niemals den C99-Standard unterstützen wird.

    Der std::string und vor allen die vollwertigen Container der stl (vector und map/set um mal die für mich wichtigsten zu nennen) bieten dir einen Komfort, der in C natürlich nachprogrammierbar ist, dies aber gerade im Fall von assoziativen Containern ein durchaus größeres Unterfangen ist.
    Dann sind noch andere Konzepte wie RAII, Exceptions, Templates und vieles mehr - Dinge, die die Windowsprogrammierung nicht verkomplizieren, sondern mMn gewaltig vereinfachen.
    Du kannst dir ja mal den Petzold durchlesen - wurde ja gerade verlinkt, sehen, wie er in C programmiert und entscheiden, ob das Ein oder Andere in C++ nicht einfacher lösbar gewesen wäre (auch für C++ Programmierer ist das natürlich die Standardlektüre).

    Und irgendwann möchtest du vielleicht mit den MFC arbeiten oder plattformunabhängig programmieren und dir QT oder wxWidgets anschauen - in allen Fällen kannst du mit C++ weiter machen.

    just my 2 Cents.



  • Selbst im Embedded-Bereich wird C++ immer wichtiger.
    Ich persönlich ärgere mich, dass ich mich mit so einer Steinzeitsprache wie C im Studium rumschlagen muss. Als ob das nicht Strafe genug wäre, beschränken wir uns auch noch auf C89. Es gibt nicht wirklich Aussicht auf ein Fortschreiten der Sprache. Formal ja, praktisch nein, weil sich MS weigert selbst C99 vollständig zu unterstützen und C89 einfach am weitesten verbreitet ist. In anderen Sprachen finden die Neuerungen Einzug in den Alltag, aber bei C ist alles festgefroren. Das ist in meinen Augen ziemlich irre!

    Aber gerade im Linux-Bereich wird auf C geschworen. Zum einen weil es Tradition ist, zum Anderen, weil es engstirnige C-Verfechter wie Linus Torvalds gibt...

    Es ist zum Mäusemelken!

    L. G.
    Steffo



  • Steffo schrieb:

    Ich persönlich ärgere mich, dass ich mich mit so einer Steinzeitsprache wie C im Studium rumschlagen muss.

    Na ja, lange Projekte werdet ihr damit wohl nicht machen müssen - und die Sprache selbst ist schnell gelernt. (Sie hat ja fast keine Features. :D)



  • Ja, die Sprache ist schnell gelernt, aber selbst im Embedded Bereich hält C++ zunehmend Einzug und da ich mich wahrscheinlich darauf spezialisieren werde, ist das um so ärgerlicher, da C++ im Lehrplan nicht sonderlich relevant sein wird und diese Sprache ist nicht über Nacht gelernt...



  • Steffo schrieb:

    Selbst im Embedded-Bereich wird C++ immer wichtiger.
    Ich persönlich ärgere mich, dass ich mich mit so einer Steinzeitsprache wie C im Studium rumschlagen muss. Als ob das nicht Strafe genug wäre, beschränken wir uns auch noch auf C89. Es gibt nicht wirklich Aussicht auf ein Fortschreiten der Sprache. Formal ja, praktisch nein, weil sich MS weigert selbst C99 vollständig zu unterstützen und C89 einfach am weitesten verbreitet ist. In anderen Sprachen finden die Neuerungen Einzug in den Alltag, aber bei C ist alles festgefroren. Das ist in meinen Augen ziemlich irre!

    Aber gerade im Linux-Bereich wird auf C geschworen. Zum einen weil es Tradition ist, zum Anderen, weil es engstirnige C-Verfechter wie Linus Torvalds gibt...

    Es ist zum Mäusemelken!

    L. G.
    Steffo

    C ist kewl!

    Als Orientierung:
    http://www.pbm.com/~lindahl/real.programmers.html

    Back in the good old days-- the "Golden Era" of computers-- it was easy to separate the men from the boys (sometimes called "Real Men" and "Quiche Eaters" in the literature). During this period, the Real Men were the ones who understood computer programming, and the Quiche Eaters were the ones who didn't.

    Bist du ein "Real Man" oder "Quiche Eater", Steffo?



  • Steffo schrieb:

    Ja, die Sprache ist schnell gelernt, aber selbst im Embedded Bereich hält C++ zunehmend Einzug und da ich mich wahrscheinlich darauf spezialisieren werde, ist das um so ärgerlicher, da C++ im Lehrplan nicht sonderlich relevant sein wird und diese Sprache ist nicht über Nacht gelernt...

    Hättest du vor ein paar Jahren noch nach dem Diplomstudiengang studiert, in dem C++ an einigen Hochschulen an der Tagesordnung war, dann hättest du letzten Endes auch nicht mehr gemacht als C in C++.

    Ich kann die Abneigung gegen C nicht verstehen, im Gegensatz zu den ganzen OO Sprachen lernt man hier wirklich noch die CPU auf beinahe Assemblerebene zu programmieren, was zu einem tieferen Verständnis der Abläufe führt und auch Raum für manuelle Optimierungen zuläßt.
    Aber wahrscheinlich liegt die Abneigung auch einfach daran, daß die Java und C# Generation mit C einfach überfordert ist und bezüglich C++ nur in die OO Ecke flüchtet um dort dann so etwas wie Java/C# in C++ zu machen.

    Und C ist im µC Bereich noch lange nicht tot, wer C nicht mag, der hat meiner Meinung nach im Embedded Bereich nichts zu suchen.

    Der Vorteil von C++ greift erst bei größeren SW Projekten, aber für diese sind gerade die µC zu schwach und das wird sich auch nicht ändern, nur weil man meint, daß die ARM CPUs, die ja aus der µC Ecke kommen, der Maßstab für µC wären. Das sind sie nämlich nicht, nur weil ARM CPUs die Handys und Tablets erobern wird es noch weiterhin µC für Waschmaschinen und Regelungssysteme jeder Art geben und da benutzt man immer noch die kleinen µC, wenn sie dafür ausreichen.
    Es wird also auch noch in 10 Jahren µC geben, die nur wenige Bytes als Arbeitsspeicher haben und bei denen es sich noch lohnen kann, einige Algorithmen händisch oder gar in Assembler zu implementieren, aber genau hier ist dann auch C noch eine ausgezeichnete Wahl, wenn man nicht ganz tief in Assembler versinken will.



  • Mit C bin ich bis jetzt nicht überfordert. Immerhin hat es für eine 1,0 in Systemprogrammierung gereicht.
    Ich bin auf der Suche nach Praktikas und oft wird da C und C++ im selben Atemzug erwähnt. Du wirst es kaum glauben, aber ich hab kürzlich ein Gespräch mit einem Vertreter eines Automobilzulieferer gehabt, die Autoschlüssel herstellen und gefragt, in welcher Sprache sie ihre Schlüssel programmieren. Ich bekam C/C++ als Antwort. Vereinzelt noch in Assembler, aber er gehe davon aus, dass in 2-3 Jahren nur noch in C/C++ programmiert wird.
    C++ bietet zwar hohe Abstraktion an, versucht dies aber eben nicht auf Kosten der Geschwindigkeit zu tun. Es gibt sogar Kernel die in C++ geschrieben wurden. BeOS ist so ein Beispiel. Ja, es ist gestorben, aber nicht weil es in C++ programmiert wurde ( 🙄 ), sondern weil es dafür kaum Software gab.
    Für C gibt es mehr Compiler und der Code ist oft auch kleiner als C++ Code. Das ist der einzige Grund, weshalb C noch so verbreitet ist. Ansonsten hat es sprachtechnisch nicht wirklich Vorteile gegenüber C++. Es macht zunehmend mehr Sinn C++ anstatt C zu verwenden. Die Compiler werden immer besser und der Speicher ausreichend groß, so dass es kaum noch einen Unterschied macht, ob man C oder C++ Code in den RAM lädt.

    C ist in meinen Augen einfach nur überbewertet und sollte in neuen Projekten möglichst nicht verwendet werden, außer es gibt verdammt gute Gründe dafür...



  • even 'C' programming can be appreciated by the Real Programmer: after all, there's no type checking, variable names are seven (ten? eight?) characters long, and the added bonus of the Pointer data type is thrown in-- like having the best parts of Fortran and assembly language in one place. (Not to mention some of the more creative uses for #define.)

    Mit C kann man viele und auch schmutzige Sachen machen.
    Oder hast du schon mal einen Kernel Exploit in C++ gesehen?



  • 🙂



  • EOP schrieb:

    even 'C' programming can be appreciated by the Real Programmer: after all, there's no type checking, variable names are seven (ten? eight?) characters long, and the added bonus of the Pointer data type is thrown in-- like having the best parts of Fortran and assembly language in one place. (Not to mention some of the more creative uses for #define.)

    Mit C kann man viele und auch schmutzige Sachen machen.
    Oder hast du schon mal einen Kernel Exploit in C++ gesehen?

    C ist ein Subset von C++, ergo geht da auch alles, auch wenn man demn Compiler geringfügig mehr in den Hintern treten muss, wenn man gerne schwachsinnigen Output möchte.



  • C rulez schrieb:

    Der Vorteil von C++ greift erst bei größeren SW Projekten,

    Wo ziehst du denn da die Grenze? Also, ab wann ist ein Projekt "größer"?



  • C rulez schrieb:

    Ich kann die Abneigung gegen C nicht verstehen, im Gegensatz zu den ganzen OO Sprachen lernt man hier wirklich noch die CPU auf beinahe Assemblerebene zu programmieren, was zu einem tieferen Verständnis der Abläufe führt und auch Raum für manuelle Optimierungen zuläßt.

    Nur weil man mit Zeigern in einem linearen Speichermodell rumfrikelt, kriegt man nicht ansatzweise mit, was das Betriebssystem und v.a. die CPU tatsächlich tun.
    Das Argument des tiefen Verständnisses ist auf Assemblerebene schon lange nicht mehr haltbar, bei C ist es einfach nur dumm.

    C rulez schrieb:

    Aber wahrscheinlich liegt die Abneigung auch einfach daran, daß die Java und C# Generation mit C einfach überfordert ist und bezüglich C++ nur in die OO Ecke flüchtet um dort dann so etwas wie Java/C# in C++ zu machen.

    Funktionen, Zeiger, Strukturen, Kontrollflussanweisungen. Das wars.
    C ist trivial gegenüber C++, Java und C#.



  • nomen est omen et suum quique ad compiler. 🤡
    op platt: wat den eenen sien uhl is den annern sien nachtigall!

    Der Fragesteller hatte klar gesagt, er kommt von C++ und möchte für einige Dinge mehr Verständnis von C haben. Der Grund war, die WinApi und anderes bieten eben eine reine C-Schnittstelle - und kommen damit gut aus. Was soll nun wieder der Murks mit einer religiös anmutenden Diskussion über C, C++, C#, Java, usw.? 😕


  • Mod

    berniebutt schrieb:

    Der Fragesteller hatte klar gesagt, er kommt von C++ und möchte für einige Dinge mehr Verständnis von C haben. Der Grund war, die WinApi und anderes bieten eben eine reine C-Schnittstelle - und kommen damit gut aus. Was soll nun wieder der Murks mit einer religiös anmutenden Diskussion über C, C++, C#, Java, usw.? 😕

    Das ist ein automatischer Forenbot, der auf die Stichworte C, C++, Java und C# reagiert, wenn zwei oder mehr davon in einem Beitrag erscheinen. Dann wird automatisch ein (höchstwahrscheinlich völlig unpassender, aber das ist dann egal) Beitrag generiert, der einen Sprachflamewar provoziert. Dies verursacht dann auf virale Weise mehr Beiträge von echten Usern und hilft so, den Umfang, und somit die Bedeutung, des Forums zu erhöhen.



  • einige Algorithmen händisch oder gar in Assembler zu implementieren

    Welche Algorithmen laufen denn so auf Mikrokontroller. Sind sie eher einfacher oder komplexer Natur? Also Sortieren/Suchen vs. neuronale Netze ...



  • SeppJ schrieb:

    [Das ist ein automatischer Forenbot, ...

    Ist der von der Sirius Cybernetics Corporation?

    Es ist ja alles so deprimierend.
    😉


Anmelden zum Antworten