Le guide définitif du livre C et la liste

400

Cette question tente de collecter une liste de livres de qualité maintenue par la communauté 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:


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.

lillq
la source
31
Pour ne pas minimiser la question, ce qui est bien, mais ... la plupart des gens mettent des années à maîtriser K&R. Il y en a plus que vous ne le pensez. La finesse du livre est trompeuse.
dmckee --- chaton ex-modérateur
4
Si vous êtes nouveau sur C, gardez à l'esprit que le C moderne est ANSI C et tout ce qui précède cette norme (1989) peut être complètement obsolète. Filmez au milieu des années 90 ou plus tard.
Dana Robinson
7
@Dhaivat Je pense que non, attention à sauter dans le train en marche de K&R. K&R ne traite pas d'une bonne conception de programme ni de bonnes pratiques de programmation, principalement parce qu'il a été écrit à l'origine avant que quiconque sache ce qu'était une bonne pratique de programmation. Il ne mentionne pas les parties du langage C qui sont superflues ou même dangereuses. Le livre est correctement répertorié comme manuel de référence, il ne doit pas être utilisé pour enseigner / apprendre la programmation moderne.
Lundin
Je suis d'accord avec Dana que rien écrit avant les normalisations ANSI / ISO en 89/90 ne devrait apparaître sur une liste comme celle-ci. Vous pouvez également envisager d'indiquer les livres qui traitent de C99 et ceux qui ne le font pas.
Lundin

Réponses:

492

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

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


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:

Pour résumer mes points de vue, qui sont exposés ci-dessous, l'auteur présente le matériel d'une manière extrêmement simpliste et trompeuse, l'ensemble du corpus est un gâchis groupé, et certaines des opinions et analyses qu'il propose sont tout simplement fausses. J'ai essayé de voir ce livre avec les yeux d'un novice, mais malheureusement, je suis biaisé par des années d'expérience dans l'écriture de code en C. Il est évident pour moi que l'auteur a une compréhension erronée de C, ou qu'il simplifie délibérément à l'excès point où il induit le lecteur en erreur (intentionnellement ou non).

"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

Jonathan Leffler
la source
6
@ PabloBarríaUrenda Le contenu inapproprié devrait être résolu en signalant le message. "Deux clics plus loin" est cependant une déclaration stupide, donc votre drapeau serait probablement rejeté. Et tout débat sur la question de savoir si le drapeau mentionné est offensant ou non ne devrait pas être ici non plus. Affichez plutôt ces préoccupations sur meta.stackoverflow.com .
Lundin
1
Qu'est-ce qui est stupide à propos de "deux clics"?
Pablo Barría Urenda
3
Comme l'année 2019, j'ai trouvé le livre <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)
Eric Wang
1
J'étais sur le point d'ajouter un livre juste pour réaliser qu'il a été édité comme non recommandé. Peut-être laisser ceux visibles dans le post en citant les raisons pour lesquelles cela devrait être évité. Peut-être même une section distincte des livres NON recommandés?
gst
3
J'ai essayé sans succès de modifier la réponse (apparemment en raison d'un formatage incorrect, qui apparaît avant même que je fasse une modification). Quoi qu'il en soit, au moins deux livres recommandés sont répertoriés comme «à éviter» ici: iso-9899.info/wiki/Main_Page#Stuff_that_should_be_avoided . Veuillez supprimer «Créez votre propre Lisp» et «Apprenez C à la dure» et ajoutez le lien ci-dessus à la section Avertissements .
gst