web-dev-qa-db-fra.com

Le guide du livre C définitif et la liste

Cette question tente de collecter une liste maintenue par la communauté de livres de qualité sur le c langage de programmation, ciblant différents niveaux de compétence.

C est un langage de programmation complexe, difficile à lire en lisant des tutoriels en ligne. Un livre complet est souvent le meilleur moyen d’apprendre la langue et la première étape consiste à trouver un bon livre. 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 texte de présentation/description de chaque livre. ( Notez que la question est verrouillée, 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 qui ne va pas. Les livres jugés satisfaisants par la communauté C ici resteront sur la liste; le reste sera régulièrement enlevé.

Pour les livres ayant des critiques de l'Association des utilisateurs de C et C++ (ACCU), un lien vers ces critiques doit être ajouté avec le livre.

Voir également:


Cette question a été discutée le Meta dans le cadre du Deleted Questions Audit 2018 .
Le consensus était de le garder non supprimé et activement maintenu.

401
lillq

Avertissement

Ceci est une liste de livres au hasard 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 énumérés contiennent des déclarations manifestement incorrectes ou enseignent des pratiques incorrectes/nuisibles. Les personnes qui connaissent de tels livres peuvent éditer cette réponse pour l’améliorer. Voir La liste de livres en C est devenue féroce. Que faire avec? , et aussi Audit de 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). Encore une bonne, brève mais complète introduction au C (C90, pas C99 ou versions ultérieures), écrite par l’inventeur du C. Cependant, le langage a changé et un bon style C s’est développé au cours des 25 dernières années. le livre qui montre son âge.

  • C: Un manuel de référence (5ème édition) - Samuel P. Harbison et Guy R. Steele (2002). Un excellent ouvrage de référence sur C, jusqu’à C99 inclus. Ce n'est pas un tutoriel, et probablement impropre aux débutants. C'est génial si vous devez écrire un compilateur pour C, comme les auteurs devaient le faire quand ils ont commencé.

  • Référence de poche C (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 de langage C peuvent être trouvées ici . Il existe une version en ligne du projet de norme C11 .

  • Le nouveau standard C - une référence annotée (PDF gratuit) - Derek M. Jones (2009). La "nouvelle norme" à laquelle il est fait référence est l'ancienne norme C99 plutôt que C11.

  • Justification de la norme C99 .


Débutant

Intermédiaire

  • Programmation orientée objet avec ANSI-C (PDF gratuit) - Axel-Tobias Schreiner (1993). Le code devient un peu compliqué. Si vous voulez C++, utilisez C++.

  • Interfaces et implémentations C - David R. Hanson (1997). Fournit des informations sur la manière de définir une limite 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 des listes, des ensembles, des exceptions, la manipulation de chaînes, des allocateurs de mémoire, etc. En gros, Hanson a pris tout le code qu'il avait écrit dans le cadre de la construction de Icon et lcc et en a extrait les meilleurs éléments sous une forme que d'autres personnes pourraient réutiliser pour leurs propres projets. . Il s'agit d'un modèle de bonne programmation en C utilisant des techniques de conception modernes (y compris l'abstraction de données de Liskov), qui montre comment organiser un grand projet en tant que groupe de bibliothèques utiles.

  • Le livre du puzzle C - Alan R. Feuer (1998)

  • La bibliothèque standard C - P.J. Plauger (1992). Il contient le code source complet d'une implémentation de la bibliothèque standard C89, ainsi qu'une discussion détaillée sur la conception et les raisons pour lesquelles le code est conçu comme indiqué.

  • 21ème siècle: 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 suivants).

  • Algorithmes en C - Robert Sedgewick (1997). Vous donne une réelle compréhension de la mise en œuvre des algorithmes en C. Très lucide et clair; vous incitera probablement à jeter tous vos autres livres d’algorithmes et à conserver celui-ci.

  • Pointeurs sur C - Kenneth Reek (1997).

  • Pointeurs en 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 Unleashed - Richard Heathfield, Lawrence Kirby, et al. (2000). Pas idéal, mais cela vaut la peine que les programmeurs intermédiaires s'exercent aux problèmes écrits dans ce livre. C’est une bonne approche de type livre de recettes suggérée par les contributeurs de comp.lang.c.

  • C moderne - Jens Gustedt (2017). C couvre C en 5 niveaux (rencontre, connaissance, cognition, expérience, ambition) du C débutant au C avancé. Il couvre les fils C11 et l'accès atomique, ce que peu d'autres livres font et que tous les compilateurs ne reconnaissent pas dans tous les environnements.

Expert


Non classé

  • Essential C (PDF gratuit) - Nick Parlante (2003). Notez que ceci décrit le langage C90 en plusieurs points (, par exemple , en discutant de // commentaires et de l’emplacement des déclarations de variables à des points arbitraires du code), traité avec une certaine prudence.

  • FAQ sur la programmation en C: Foire aux questions - Steve Summit (1995). Ceci est le livre du site Web mentionné plus haut. 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.

  • Fonction C - Pieter Hartel et Henk Muller (1997). Enseigne des pratiques modernes qui sont inestimables pour la programmation de bas niveau, en gardant à l’esprit la simultanéité et la modularité.

  • La pratique de la programmation - Brian W. Kernighan et Rob Pike (1999). Un très bon livre pour accompagner K & R. Il utilise aussi C++ et Java.

  • pièges et pièges en C par A. Koenig (1989). Très bien, mais le style C est antérieur à la norme C, ce qui la rend moins recommandable de nos jours.

    Certains ont plaidé en faveur de la suppression des "pièges et pièges" de cette liste, car certaines personnes sont ainsi prises au piège en commettant des erreurs; d'autres continuent à plaider pour son inclusion. Peut-être devrait-il être considéré comme un livre "expert", car il nécessite une connaissance assez étendue de 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 de l'industrie 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, chaque programmeur C expérimenté devrait en lire et en implémenter autant que possible. MISRA-C a été conçu à l’origine comme un guide pour les applications critiques pour la sécurité, mais il s’applique à tous les domaines d’application dans lesquels un code C stable et sans bug est souhaité (qui ne veut pas moins de bugs?). MISRA-C est en train de devenir la norme de facto dans l’ensemble du secteur des technologies intégrées et devient de plus en plus populaire, même dans les autres branches de la programmation. Il existe au moins trois publications de la norme (1998, 2004 et la version actuelle de 2012). Il existe également un document de directives de conformité MISRA datant de 2016 et de MISRA C: 2012 Amendement 1 - Lignes directrices de sécurité supplémentaires pour MISRA C: 2012 (publié en avril 2016).
    Notez que certaines des restrictions des règles MISRA ne s’appliquent pas à tous les contextes. Par exemple, la directive 4.12 indique "L'allocation de mémoire dynamique 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 de mémoire dynamique pour des éléments tels que les tables de symboles, et se passer de l'allocation de mémoire dynamique serait difficile, voire absurde.)

  • Listes archivées de livres évalués par l'ACCU sur Beginner's C (116 titres) de 2007 et Advanced C (76 titres) depuis 2008. La plupart d'entre eux ne semblent pas être disponibles le site principal plus, et vous ne pouvez pas naviguer par sujet de toute façon.


Avertissements

Méfiez-vous des livres écrits par Herbert Schildt . En particulier, vous devriez vous tenir à l'écart de C: la référence complète (4e édition, 2000), connu dans certains milieux sous le nom de C: le non-sens complet.

Méfiez-vous aussi du livre Let Us C (16th Edition, 2017) de Yashwant Kanetkar. Certaines personnes le voient comme un livre horriblement obsolète qui enseigne le Turbo C et qui contient beaucoup de matériel obsolète, trompeur et carrément incorrect.

Learn C The Hard Way (2015) de Zed Shaw. Un livre avec des critiques mitigées. ne critique de ce livre par Tim Hentenaar:

Pour résumer mes vues, exposées ci-dessous, l'auteur présente le matériel de manière extrêmement simpliste et trompeuse, l'ensemble du corpus est un fouillis et certaines des opinions et analyses qu'il propose sont tout à fait fausses. J'ai essayé de voir ce livre à travers les yeux d'un novice, mais malheureusement, des années d'expérience dans l'écriture de code en C me sont partisanes. point où il induit en erreur le lecteur (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, il représente un exposé intéressant et inhabituel sur C, bien que j'ai des réserves sur certaines parties du livre.  Jonathan Leffler


Dépassé


Autres contributeurs , non crédités dans l'historique de révision:
Alex Lockwood , Ben Jackson , Bulles , griffes , coledot =, Dana Robinson , Daniel Holden , Dervin Thunk , dwc , Erci Ho , Garen , haziz , Johan Bezem , Jonathan Leffler , Joshua Partogi , - Lucas , Lundin , Matt K. , mossplix , Matthieu M. , - midor , Nietzche-jo , Norman Ramsey , r3st0r , ridthyself , Robert S. Barnes , Tim Ring , Tony Bai , VMAtm

470
Tom Ritter