Cette question tente de collecter une liste de livres de qualité maintenue par la communautéc langage de programmation, ciblé sur différents niveaux de compétences.
C est un langage de programmation complexe qui est difficile à prendre en main en lisant des didacticiels en ligne. Un livre complet est souvent le meilleur moyen d'apprendre la langue, et trouver un bon livre est la première étape. Il est important d'éviter les livres mal écrits et, plus important encore, les livres contenant de graves erreurs techniques.
Veuillez suggérer des modifications à la réponse acceptée pour ajouter des livres de qualité, avec un niveau de compétence approximatif et un bref descriptif / description de chaque livre. ( Notez que la question est verrouillée, donc aucune nouvelle réponse ne sera acceptée. Une seule réponse est conservée avec la liste )
N'hésitez pas à débattre des choix de livres, de la qualité, des titres, des résumés, des niveaux de compétence et de tout ce que vous voyez qui ne va pas. Les livres jugés satisfaisants par la communauté C ici resteront sur la liste; le reste sera régulièrement retiré.
Pour les livres qui ont des critiques par l'Association des utilisateurs C et C ++ (ACCU), un lien vers ces critiques doit être ajouté avec le livre.
Voir également:
- Autres ressources liées au C dans le c balise wiki
- Une liste similaire pour c ++: Le guide et la liste des livres C ++ définitifs
Cette question a été discutée sur Meta dans le cadre de l' audit des questions supprimées 2018 .
Le consensus était de le garder non supprimé et activement maintenu.
Réponses:
Attention
Ceci est une liste de livres aléatoires de qualité diverse. De l'avis de certaines personnes (avec une certaine justification), il ne s'agit plus d'une liste de livres recommandés. Certains des livres répertoriés contiennent des déclarations manifestement incorrectes ou enseignent des pratiques erronées / nuisibles. Les personnes qui connaissent ces livres peuvent modifier cette réponse pour aider à l'améliorer. Voir La liste de livres C est devenue un détraqué. Que dois-je faire avec ça? , ainsi que l' audit de la question supprimée 2018 .
Référence (tous les niveaux)
Le langage de programmation C (2e édition) - Brian W. Kernighan et Dennis M. Ritchie (1988). Toujours une bonne, courte mais complète introduction au C (C90, pas C99 ou versions ultérieures), écrite par l'inventeur de C. Cependant, le langage a changé et un bon style C s'est développé au cours des 25 dernières années, et il y a des parties de le livre qui montre son âge.
C: Un manuel de référence (5e édition) - Samuel P. Harbison et Guy R. Steele (2002). Un excellent ouvrage de référence sur le C, jusqu'au C99 inclus. Ce n'est pas un tutoriel, et probablement impropre aux débutants. C'est génial si vous avez besoin d'écrire un compilateur pour C, comme les auteurs ont dû le faire lorsqu'ils ont commencé.
C Pocket Reference (O'Reilly) - Peter Prinz et Ulla Kirch-Prinz (2002).
La FAQ comp.lang.c - Steve Summit. Site Web avec des réponses à de nombreuses questions sur C.
Différentes versions des normes du langage C peuvent être trouvées ici . Il existe une version en ligne du projet de norme C11 .
La nouvelle norme C - une référence annotée (PDF gratuit) - Derek M. Jones (2009). La "nouvelle norme" mentionnée est l'ancienne norme C99 plutôt que C11.
Justification de la norme C99 .
Débutant
Programmation en C: une approche moderne (2e édition) - KN King (2008). Un bon livre pour apprendre C.
Programmation en C (4e édition) - Stephen Kochan (2014). Une bonne introduction générale et un tutoriel.
C Primer Plus (5e édition) - Stephen Prata (2004)
Un livre sur C - Al Kelley / Ira Pohl (1998).
The C Book (gratuit en ligne) - Mike Banahan, Declan Brady et Mark Doran (1991).
C: Comment programmer (8e édition) - Paul Deitel et Harvey M. Deitel (2015). Beaucoup de bons conseils et de bonnes pratiques pour les débutants. L'indice est très bon et sert de référence décente (juste pas complètement complet et très peu profond).
Head First C - David Griffiths et Dawn Griffiths (2012).
Début C (5e édition) - Ivor Horton (2013). Très bonne explication des pointeurs, utilisant beaucoup de petits programmes complets.
Sams Teach Yourself C in 21 Days - Bradley L. Jones et Peter Aitken (2002). Très bon truc d'introduction.
Programmation d'applications en ANSI C - Richard Johnsonbaugh et Martin Kalin (1996).
Intermédiaire
C moderne - Jens Gustedt (2017 1er Edn; 2020 2nd Edn). Couvre C en 5 niveaux (rencontre, connaissance, cognition, expérience, ambition) du début C au C avancé. Il couvre C11 et C17, y compris les threads et l'accès atomique, ce que peu d'autres livres font. Tous les compilateurs ne reconnaissent pas ces fonctionnalités dans tous les environnements.
C Interfaces et implémentations - David R. Hanson (1997). Fournit des informations sur la façon de définir une frontière entre une interface et une implémentation en C de manière générique et réutilisable. Il démontre également ce principe en l'appliquant à la mise en œuvre de mécanismes et de structures de données communs en C, tels que les listes, les ensembles, les exceptions, la manipulation de chaînes, les allocateurs de mémoire, etc. Fondamentalement, Hanson a pris tout le code qu'il avait écrit dans le cadre de la construction d' Icon et de lcc et a sorti les meilleurs morceaux sous une forme que d'autres personnes pourraient réutiliser pour leurs propres projets. C'est un modèle de bonne programmation C utilisant des techniques de conception modernes (y compris l'abstraction des données de Liskov), montrant comment organiser un grand projet C comme un tas de bibliothèques utiles.
Le C Puzzle Book - Alan R. Feuer (1998)
Bibliothèque Standard C - PJ Plauger (1992). Il contient le code source complet d'une implémentation de la bibliothèque standard C89, ainsi qu'une discussion approfondie sur la conception et pourquoi le code est conçu comme indiqué.
21st Century C: C Conseils de la nouvelle école - Ben Klemens (2012). En plus du langage C, le livre explique gdb, valgrind, autotools et git. Les commentaires sur le style se trouvent dans la dernière partie (chapitre 6 et au-delà).
Algorithmes dans C - Robert Sedgewick (1997). Vous donne une réelle compréhension de l'implémentation d'algorithmes en C. Très lucide et clair; vous donnera probablement envie de jeter tous vos autres livres d'algorithmes et de garder celui-ci.
Pointeurs sur C - Kenneth Reek (1997).
Pointeurs dans C - Naveen Toppo et Hrishikesh Dewan (2013).
Résolution de problèmes et conception de programmes en C (6e édition) - Jeri R. Hanly et Elliot B. Koffman (2009).
Structures de données - Une approche avancée utilisant C - Jeffrey Esakov et Tom Weiss (1989).
C Déchaîné - Richard Heathfield, Lawrence Kirby et al. (2000). Pas idéal, mais cela vaut la peine que les programmeurs intermédiaires pratiquent les problèmes écrits dans ce livre. Il s'agit d'une bonne approche de type livre de cuisine suggérée par les contributeurs de comp.lang.c.
Expert
Expert C Programming: Deep C Secrets - Peter van der Linden (1994). Beaucoup d'informations intéressantes et d'histoires de guerre de l'équipe du compilateur Sun, mais un peu datées par endroits.
Programmation C avancée par l'exemple - John W. Perry (1998).
Programmation avancée dans l'environnement UNIX - Richard W. Stevens et Stephen A. Rago (2013). Description complète de la façon d'utiliser les API Unix à partir du code C, mais pas tellement sur la mécanique du codage C.
Non classé
Essential C (PDF gratuit) - Nick Parlante (2003). Notez que cela décrit le langage C90 à plusieurs points ( par exemple , lors de la discussion des
//
commentaires et du placement des déclarations de variables à des points arbitraires dans le code), il doit donc être traité avec une certaine prudence.FAQ sur la programmation C: Foire aux questions - Steve Summit (1995). Il s'agit du livre du site Web mentionné précédemment. Il ne couvre pas C99 ou les normes ultérieures.
C en bref - Peter Prinz et Tony Crawford (2005). Excellent livre si vous avez besoin d'une référence pour C99.
C fonctionnel - Pieter Hartel et Henk Muller (1997). Enseigne des pratiques modernes qui sont inestimables pour la programmation de bas niveau, avec la simultanéité et la modularité à l'esprit.
La pratique de la programmation - Brian W. Kernighan et Rob Pike (1999). Un très bon livre pour accompagner K&R. Il utilise également C ++ et Java.
C Traps and Pitfalls par A. Koenig (1989). Très bien, mais le style C est antérieur au C standard, ce qui le rend moins recommandable de nos jours.
Certains ont plaidé pour la suppression des «pièges et pièges» de cette liste, car cela a poussé certaines personnes à commettre des erreurs; d'autres continuent de plaider pour son inclusion. Peut-être devrait-il être considéré comme un livre «expert» car il nécessite une connaissance modérément approfondie du C pour comprendre ce qui a changé depuis sa publication.
Construisez votre propre Lisp - Daniel Holden (2014). Une façon agréable d'apprendre C.
MISRA-C - norme industrielle publiée et maintenue par la Motor Industry Software Reliability Association. Couvre C89 et C99.
Bien que ce ne soit pas un livre en tant que tel, de nombreux programmeurs recommandent de le lire et de l'implémenter autant que possible. MISRA-C était à l'origine destiné à servir de lignes directrices pour les applications critiques pour la sécurité en particulier, mais il s'applique à tout domaine d'application où un code C stable et sans bogue est souhaité (qui ne veut pas moins de bogues?). MISRA-C devient la norme de facto dans toute l'industrie embarquée et devient de plus en plus populaire même dans d'autres branches de programmation. Il existe (au moins) trois publications de la norme (1998, 2004 et la version actuelle de 2012). Il existe également un document MISRA Compliance Guidelines de 2016 et MISRA C: 2012 Amendement 1 - Additional Security Guidelines for MISRA C: 2012 (publié en avril 2016).
Notez que certaines des restrictions des règles MISRA ne conviennent pas à tous les contextes. Par exemple, la directive 4.12 indique "l'allocation dynamique de mémoire ne doit pas être utilisée". Ceci est approprié dans les systèmes embarqués pour lesquels les règles MISRA sont conçues; ce n'est pas approprié partout. (Les compilateurs, par exemple, utilisent généralement l'allocation dynamique de mémoire pour des choses comme les tables de symboles, et se passer de l'allocation dynamique de mémoire serait difficile, sinon absurde.)
Listes archivées de livres examinés par l'ACCU sur le débutant C (116 titres) de 2007 et avancé C (76 titres) de 2008. La plupart d'entre eux ne semblent plus être sur le site principal, et vous ne pouvez pas parcourir cela par sujet en tous cas.
Avertissements
Méfiez-vous des livres écrits par Herbert Schildt . En particulier, vous devez vous éloigner de C: The Complete Reference (4e édition, 2000), connu dans certains cercles sous le nom de C: The Complete Nonsense.
N'utilisez pas non plus le livre Let Us C (16 e édition, 2017) de Yashwant Kanetkar. Beaucoup de gens le considèrent comme un livre obsolète qui enseigne le Turbo C et contient beaucoup de matériel obsolète, trompeur et incorrect. Par exemple, la page 137 décrit la sortie attendue de
printf("%d %d %d\n", a, ++a, a++)
et ne la classe pas comme un comportement non défini comme il se doit.Learn C The Hard Way (2015) par Zed Shaw. Un livre avec des critiques mitigées. Une critique de ce livre de Tim Hentenaar:
"Learn C The Hard Way" n'est pas un livre que je pourrais recommander à quelqu'un qui apprend à programmer et à apprendre C. Si vous êtes déjà un programmeur compétent dans une autre langue apparentée, alors il représente une exposition intéressante et inhabituelle sur C, bien que j'ai des réserves sur certaines parties du livre. Jonathan Leffler
Dépassé
D'autres contributeurs , pas nécessairement crédités dans l'historique des révisions, incluent:
Alex Lockwood , Ben Jackson , Bubbles , claws , coledot , Dana Robinson , Daniel Holden , Dervin Thunk , dwc , Erci Hou , Garen , haziz , Johan Bezem , Jonathan Leffler , Joshua Partogi , Lucas , Lundin , Matt K. , mossplix , Matthieu M. , Midor , Nietzche-jou , Norman Ramsey , r3st0r3 , ridthyself , Robert S.Barnes , Steve Summit , Tim Ring , Tony Bai , VMAtm
la source
<Modern C>
très intéressant à lire, il utilise beaucoup de syntaxe c99 et c11, très compact et bien écrit. Et tu sais quoi? C'est gratuit !!! Vous pouvez télécharger la dernière version au format pdf ici: icube-icps.unistra.fr/img_auth.php/d/db/ModernC.pdf (BTW, l'auteur semble mettre à jour et publier le livre au lien ci-dessus selon les besoins)