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