Ich möchte mich mit C beschäftigen und normalerweise, wenn ich eine neue Sprache lernen möchte, denke ich an ein einfaches / erreichbares Projektziel, das einen praktischen Zweck hat (eine API verwenden, eine Aufgabe automatisieren usw.)
Es fällt mir schwerer, eine für C zu finden, vor allem, weil alles, was ich lese, darauf hinweist, dass C derzeit hauptsächlich in eingebetteten Systemen und komplexeren Softwareprojekten wie Betriebssystemen verwendet wird.
Weist mich das darauf hin, dass ich es nicht lernen muss oder dass ich in meiner Lernstrategie nur ein bisschen komplizierter sein muss?
Verweise auf praktische Lernressourcen? (Tutorial / wie das geht, ergibt ein Endergebnis, das einen Zweck / Nutzen hat)
Antworten:
Ich würde nur empfehlen, eine Kopie von Kernighan und Ritchies The C Programming Language (2nd Edition) zu kaufen . Am Ende jedes Kapitels finden Sie eine Reihe von Übungen, die Sie ausführen können, sowie eine sehr gute Einführung in die C-Sprache. Es wird Sie nicht zum Meister der Sprache machen, aber Sie sollten am Ende des Buches und der Übungen ein ausreichendes Verständnis haben, um vielleicht ein in C geschriebenes Open-Source-Projekt zu finden , zu dem Sie die Quelle lesen und vielleicht einen Beitrag leisten können zu.
Wenn Sie aktuelle Projekte mit C-Code sehen möchten. Es wird immer schwieriger - viele Projekte verwenden eine "höhere" Sprache, aber C ist noch am Leben und munter. Wenn Sie C lernen möchten, haben Sie keine Angst, das Rad neu zu erfinden, um das Lernen zu erreichen. Es ist keine gute Idee, Lösungen auf der Uhr neu zu erfinden, aber es ist vollkommen in Ordnung, dies als akademische Übung zu tun.
quelle
Sie müssen die Speicherzuordnung wirklich verstehen. Sie klingen, als hätten Sie bereits andere Sprachen verwendet, aber es besteht die Möglichkeit, dass diese anderen Sprachen die wichtigsten Details der Speicherverwaltung vor Ihnen verborgen haben. In C ist die Speicherverwaltung immer explizit. Dies hat einige Vorteile, aber es bedeutet, dass Sie vorsichtig sein müssen, um es richtig zu machen, sonst bricht die Hölle los.
Verwenden Sie die für die von Ihnen verwendete Plattform verfügbaren Speicher-Debugging-Funktionen. Für Linux gibt es Electric Fence, für Mac OS X Guard Malloc. Es gibt auch Valgrind, das eine Reihe von Betriebssystemen unterstützt.
Wenn Sie den freizugebenden Speicher nicht freigeben können, liegt ein Speicherverlust vor. Wenn Sie das weiter machen, wird Ihnen der Speicher ausgehen. Selbst mit dem Sicherungsspeicher (was die meisten Leute als virtuellen Speicher bezeichnen) können Sie dazu führen, dass das System übermäßig blättert oder sogar nicht mehr genügend Speicherplatz zur Verfügung steht.
Wenn Sie bereits freigegebenen Speicher freigeben, beschädigen Sie den Heap und stürzen ab, aber wahrscheinlich nicht sofort. Sie beschädigen den Heap auch, wenn Sie einen Puffer überlaufen. Die Speicher-Debugging-Tools helfen bei all diesen Problemen.
Unit-Tests helfen auch.
quelle
Ich stimme den meisten Menschen hier zu, dass die heutigen Sprachen von der jeweiligen Aufgabe bestimmt werden. Es gab eine Zeit, in der Sie diesbezüglich nur eine begrenzte Auswahl hatten. Heutzutage wird C hauptsächlich in der Programmierdomäne Embedded / System verwendet, in der Codeoptimierung erforderlich ist. Sie müssen präzise Codes schreiben, um das Maximum zu erreichen, denn wenn Sie jemals anfangen, diese Abstraktion zu verwenden, muss das zugrunde liegende Material sehr robust sein. Ich würde sagen, Sie versuchen, einige Open-Source-GNU-Projekte wie Linux selbst oder etwas, das C-Entwickler benötigt, zu umgehen. Versuchen Sie sich in diesen Projekten, anstatt in C etwas von Grund auf neu zu schreiben. Dies ist wahrscheinlich der bessere Weg, um Codes zu schreiben und eine Sprache zu lernen.
quelle
Sie möchten etwas tun, das über die Befehlszeile funktioniert. Die GUI-Programmierung in C ist selbst bei einem guten GUI-Framework ein großes Problem.
Mein üblicher Vorschlag für eine praktische C-Lernerfahrung war eine Kontaktliste oder eine andere einfache Datenverwaltungs-App. Dies deckt die meisten wichtigen Elemente ab (E / A, Speicherverwaltung, Textverarbeitung usw.), und Sie müssen nichts außerhalb der Standard-C-Bibliothek verwenden, um dies zu erreichen. C bietet keine integrierte Unterstützung für Grafik, Netzwerk, Sound oder vieles mehr 1. Vermeiden Sie daher bei Ihrem ersten Einstieg in die C-Programmierung alles, was auf solchen Dingen beruht.
C kann für die allgemeine Programmierung verwendet werden; Sie müssen nur Ihre Erwartungen etwas senken (stellen Sie sich vor, es ist 1983 und Sie sitzen vor einem VT52, der an einen VAX 11/750 angeschlossen ist, und Sie sind in der richtigen Einstellung).
Denken Sie daran, C hat keine Klingenschutzvorrichtungen und hindert Sie nicht daran, etwas Dummes zu tun. Die Sprachdefinition ist stellenweise etwas locker, und es gibt einige Operationen, die als solche nicht illegal , aber auch nicht genau definiert sind.
1 - Die neueste (2011) Überarbeitung des Sprachstandards hat eine integrierte Threading-Unterstützung hinzugefügt
quelle
Ich empfehle Project Euler . Ich habe es verwendet, um mein C ++ zu verbessern und es ist fantastisch. Es ist großartig, weil jedes Problem eine kleine Aufgabe ist, die weniger als eine Stunde dauern kann (zumindest die ersten).
Sie benötigen einen Profiler und ein Buch über die Optimierung des Codes für die Geschwindigkeit. Halten Sie sich unbedingt an die 1-Minuten-Regel: Sie müssen die Antwort innerhalb von 1 Minute erhalten.
quelle
Wenn Sie bereits ein Programmierer sind, und müssen nur lernen , C, und nichts dagegen eine ältere Version der Sprache zu lernen (der Kern ist immer noch so ziemlich das gleiche), dann Leendert Ammeraal des „C für Programmierer“ nicht zu schlagen . Arbeiten Sie es durch, von Anfang bis Ende.
quelle