Je veux creuser en C et normalement quand je veux apprendre un nouveau langage, je pense à un objectif de projet simple / réalisable qui a un but pratique (utiliser une API, automatiser une tâche, etc ...)
J'ai plus de mal à en trouver un pour C, principalement parce que tout ce que je lis indique que l'utilisation principale de C se trouve actuellement dans les systèmes embarqués et les projets logiciels plus complexes comme les systèmes d'exploitation.
Est-ce que cela m'indique que je n'ai pas besoin de l'apprendre ou que je dois juste être un peu plus compliqué dans ma stratégie d'apprentissage?
Références à des ressources d'apprentissage pratiques? (tutoriel / comment cela produit un résultat final qui a un but / un avantage)
Réponses:
Je recommanderais simplement de prendre une copie du langage de programmation C de Kernighan et Ritchie (2e édition) . Il contient un certain nombre d'exercices à la fin de chaque chapitre que vous pouvez faire, ainsi qu'une très bonne introduction au langage C. Cela ne fera pas de vous un maître de la langue, mais vous devriez avoir une assez bonne compréhension à la fin du livre et des exercices afin de peut-être trouver un projet open source écrit en C que vous pourriez lire la source et peut-être contribuer à.
Si vous voulez voir des projets réels avec du code C dedans. Cela devient plus difficile - de nombreux projets utilisent un langage de "niveau supérieur", mais C est toujours vivant et dynamique. Si vous voulez apprendre le C, n'ayez pas peur de réinventer la roue pour réussir l'apprentissage. Ce n'est pas une bonne idée de réinventer des solutions sur l'horloge, mais c'est parfaitement bien de le faire comme un exercice académique.
la source
Vous devrez vraiment comprendre l'allocation de mémoire. Vous semblez avoir utilisé d'autres langues auparavant, mais il est probable que ces autres langues vous aient caché les détails sanglants de la gestion de la mémoire. En C, la gestion de la mémoire est toujours explicite. Il y a quelques avantages à cela, mais cela signifie que vous devez faire attention à bien faire les choses, sinon tout l'enfer se déchaînera.
Utilisez les fonctionnalités de débogage de mémoire disponibles pour la plate-forme que vous utilisez. Pour Linux, il y a Electric Fence, sur Mac OS X, il y a Guard Malloc. Il existe également Valgrind qui prend en charge un certain nombre de systèmes d'exploitation.
Si vous ne parvenez pas à libérer de la mémoire qui devrait être libérée, vous aurez une fuite de mémoire. Continuez ainsi et vous manquerez de mémoire. Même avec le stockage de sauvegarde (ce que la plupart des gens appellent la mémoire virtuelle), vous pouvez provoquer une page excessive du système ou même manquer d'espace d'échange.
Si vous libérez de la mémoire qui a déjà été libérée, vous corromprez le tas et vous planterez, mais probablement pas tout de suite. Vous corromprez également le tas si vous dépassez un tampon. Les outils de débogage de la mémoire vous aideront avec tout cela.
Les tests unitaires sont également utiles.
la source
Je suis d'accord avec la plupart des gens ici qu'aujourd'hui, les langues sont déterminées par la tâche à accomplir. Il fut un temps où vous aviez un choix limité à cet égard. Aujourd'hui, C est principalement utilisé dans le domaine de programmation Embedded / System où il existe un besoin d'optimisation de code. Vous devez écrire des codes précis pour obtenir le maximum, car si jamais vous commencez à utiliser cette abstraction, le contenu sous-jacent doit être très robuste. Je dirais que vous essayez de contourner certains projets GNU open source comme Linux lui-même ou quelque chose qui nécessite des développeurs C. Essayez-vous dans ces projets au lieu d'écrire quelque chose à partir de zéro en C. C'est probablement la meilleure façon d'écrire des codes et d'apprendre une langue.
la source
Vous allez vouloir faire quelque chose qui peut fonctionner à partir de la ligne de commande. La programmation GUI en C est une douleur majeure dans le cul, même avec un bon cadre GUI.
Ma suggestion habituelle pour une expérience d'apprentissage C pratique a été une liste de contacts ou une autre application de gestion de données simple. Cela couvrira la plupart des bits importants (E / S, gestion de la mémoire, traitement de texte, etc.), et vous n'aurez rien à utiliser en dehors de la bibliothèque C standard pour l'accomplir. C n'a pas de support intégré pour les graphiques, la mise en réseau, le son ou bien d'autres choses 1 , donc pour votre première incursion dans la programmation C, il est préférable d'éviter tout ce qui repose sur ce genre de choses.
C peut être utilisé pour la programmation à usage général; il vous suffit de réduire quelque peu vos attentes (imaginez que nous sommes en 1983 et que vous êtes assis devant un VT52 attaché à un VAX 11/750, et vous serez dans la bonne mentalité).
N'oubliez pas que C n'a pas de protège-lame et ne vous empêchera pas de faire quelque chose de stupide. La définition du langage est un peu lâche par endroits, et certaines opérations ne sont pas illégales en tant que telles, mais ne sont pas bien définies non plus.
1 - La dernière révision (2011) de la norme de langue a ajouté la prise en charge intégrée du filetage
la source
Je recommande Project Euler . Je l'ai utilisé pour améliorer mon C ++ et c'est génial. C'est génial car chaque problème est une petite tâche qui peut prendre moins d'une heure (au moins les premiers).
Vous aurez besoin d'un profileur et d'un livre sur l'optimisation du code pour la vitesse. Assurez-vous de respecter la règle de 1 minute: vous devez obtenir la réponse en 1 minute.
la source
Si vous êtes DÉJÀ programmeur, et JUSTE besoin d'apprendre le C, et cela ne vous dérange pas d'apprendre une ancienne version du langage (le noyau est toujours à peu près le même), alors le "C pour les programmeurs" de Leendert Ammeraal est imbattable . Parcourez-le, du début à la fin.
la source