Le Guide et la Liste Définitifs du Livre C
Cette question tente de collecter une liste gérée par la communauté de qualité livres sur le langage de programmationc , destinés à différents niveaux de compétence.
C est un langage de programmation complexe qui est difficile à prendre en main en lisant des tutoriels en ligne. Un ouvrage complet est souvent la meilleure façon 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 qui contiennent 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 court texte/description sur chaque livre. (Notez que la question est verrouillée, donc aucune nouvelle réponse ne sera acceptée. Une seule réponse est maintenue 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 est faux. 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 aussi:
- Autres C-ressources liées à la c balise wiki
- Une liste similaire pour c++: Le Guide et la liste définitifs du livre C++
Cette question a été discutée sur Meta dans le cadre de la vérification des questions supprimées 2018.
Le consensus était de le maintenir non supprimé et activement maintenu.
1 answers
Avertissement!
Ceci est une liste de livres aléatoires de qualité diverse. De l'avis de certaines personnes (avec raison), il n'est plus une liste de livres recommandés. Certains des livres énumérés contiennent des déclarations manifestement incorrectes ou enseignent des pratiques erronées/nuisibles. Les personnes qui connaissent de tels livres peuvent modifier cette réponse pour aider à l'améliorer. Voir La liste des livres C s'est détraquée. Quoi faire avec elle?, et aussi Question supprimée audit 2018.
Référence (Tous niveaux)
-
Le langage de programmation C (2e édition) - Brian W. Kernighan et Dennis M. Ritchie (1988). Toujours une bonne introduction courte mais complète à 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 du livre qui montrent son âge.
-
Il s'agit d'une référence de poche (O'Reilly) - Peter Prinz et Ulla Kirch-Prinz (2002).
-
Le comp.lang.c FAQ - Steve Sommet. Site web avec des réponses à de nombreuses questions à propos de C.
-
Différentes versions des standards 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.
Débutant
-
C Programmation: Une approche moderne (2e édition) - K. N. King (2008). Un bon livre pour apprendre C.
-
Programmation en C (4e édition) - Stephen Kochan (2014). Une bonne introduction générale et tutoriel.
-
Un livre sur C - Al Kelley / Ira Pohl (1998).
-
Le livre C (Gratuit en ligne) - Mike Banahan, Declan Brady et Mark Doran (1991).
-
La tête la première C - David Griffiths et Dawn Griffiths (2012).
-
Début C (5e édition) - Ivor Horton (2013). Très bonne explication des pointeurs, en utilisant beaucoup de programmes petits mais complets.
-
Sams Teach Yourself C à 21 Jours - - Bradley L. Jones et Peter Aitken (2002). Très bonnes choses d'introduction.
-
En vigueur C - Robert C Seacord (2020). Une bonne introduction au C moderne, y compris des chapitres sur l'allocation de mémoire dynamique, sur la structure du programme, et sur le débogage, les tests et l'analyse. Il a quelques pointeurs vers les fonctionnalités C2x probables.
Intermédiaire
-
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 communs et les structures de données en C, telles que les listes, les ensembles, les exceptions, la manipulation de chaînes, les 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 a sorti les meilleurs bits 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 de données de Liskov), montrant comment organiser un grand projet C comme un tas d'utiles bibliothèque.
-
Le livre de puzzle C - Alan R. Feuer (1998)
-
La Bibliothèque C Standard - P. J. Plauger (1992). Il contient le code source complet d'une implémentation de la bibliothèque standard C89, ainsi que des discussions approfondies sur la conception et la raison pour laquelle le code est conçu comme indiqué.
-
21ème siècle 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 en 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 Lattes (1997).
-
La résolution de problèmes et la 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).
- 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++. Il utilise uniquement C90, bien sûr.
- Extreme C: Repoussez les limites de ce que C et vous pouvez faire - Kamran Amini (2019). Ce livre s'appuie sur vos connaissances existantes en C pour vous aider à devenir un programmeur C plus expert. Vous obtenez des informations sur la conception, les fonctions et les structures des algorithmes et comprenez à la fois le multi-threading et le multi-traitement dans un environnement POSIX.
Expert
-
Expert de la Programmation en C: Profondeur C Secrets - Pierre van der Linden (1994). Beaucoup d'informations intéressantes et d'histoires de guerre de l'équipe Sun compiler, mais un peu daté par endroits.
-
Programmation C avancée par Exemple - John W. Perry (1998).
-
La 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 tant sur la mécanique du codage C.
Uncategorized
-
C Programmation FAQ: Foire aux questions - Steve Summit (1995). Ceci est le livre du site Web énuméré plus tôt. Il ne couvre pas C99 ou les normes ultérieures.
-
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.
-
C Pièges et pièges par A. Koenig (1989). Très bien, mais le style C pré-dates standard C, ce qui le rend moins recommandable ces jours-ci.
Certains ont plaidé pour la suppression des "pièges et pièges" de cette liste parce qu'elle a incité 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 de C pour comprendre ce qui a changé depuis sa publication.
-
MISRA-C - industrie norme 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 a été conçu à l'origine comme des 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 bogues est souhaité (qui ne veut pas moins de bogues?). MISRA-C devient la norme de facto en l'ensemble de l'industrie embarquée et devient de plus en plus populaire, même dans d'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 MISRA Compliance Guidelines de 2016 et MISRA C:2012 Amendment 1-Additional Security Guidelines for MISRA C: 2012 (publié en avril 2016).
Notez que certaines des restrictions dans les règles MISRA ne sont pas appropriées à tous les contextes. Pour par exemple, la directive 4.12 stipule "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 choses comme les tables de symboles, et se passer d'allocation de mémoire dynamique serait difficile, sinon absurde.)
-
Archivés des listes de ACCU-revue des livres sur Débutant C (116 titres) à partir de 2007 et Avancées C (76 titres) à partir de 2008. La plupart d'entre eux ne semblent plus être sur le site principal, et vous ne pouvez pas parcourir cela par sujet de toute façon.
Avertissements
Il existe une liste de livres et de tutoriels sur lesquels il faut faire attention au Wiki ISO 9899 , qui n'est pas lui-même formellement associé à l'ISO ou à la norme C, mais contient des informations sur la norme C (bien qu'il salue la publication de l'ISO 9899:2011 et ne mentionne pas la ISO 9899: 2018).
Méfiez-vous des livres écrits parHerbert Schildt . En particulier, vous devriez rester à l'écart de C: La Référence complète (4e édition, 2000), connue dans certains milieux sous le nom de C: Le Non-sens complet.
Aussi ne pas utiliser le livre Laissez-nous C (16il s'agit de la première édition de la série. Beaucoup de gens le considèrent comme un livre obsolète qui enseigne Turbo C et a beaucoup de matériel obsolète, trompeur et incorrect. Par exemple, page 137 discute de la sortie attendue de printf("%d %d %d\n", a, ++a, a++)
et ne la catégorise pas comme comportement indéfini comme il se doit. Il promeut également constamment des pratiques de codage non portables et boguées, telles que l'utilisation gets
, %[\n]s
dans scanf
, stocker la valeur de retour de getchar
dans une variable de type char
ou utiliser fflush
sur stdin
.
Apprendre C à la Dure (2015) par Zed Shaw. Un livre avec des critiques mitigées. Une critique de ce livre par Tim Hentenaar:
Pour résumer mon point de vue, qui sont présentés ci-dessous, l "auteur présente le matériel d" une manière grandement simplifiée et trompeuse, l "ensemble du corpus est un désordre groupé, et certaines des opinions et analyses qu" il offre sont tout simplement fausses. J'ai essayé de voir ce livre à travers 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 soit l'auteur a une compréhension erronée de C, soit il simplifie délibérément au point où il est en fait induire le lecteur en erreur (intentionnellement ou autrement).
"Apprendre C à la dure" 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 connexe, alors il représente une exposition intéressante et inhabituelle sur C, bien que j'aie des réserves sur certaines parties du livre. Jean-Pierre Leffler
Obsolète
- Pratique C La programmation (3e édition) - Steve Oualline (1997) (Débutant)
D'autres contributeurs, pas nécessairement crédités dans l'historique des révisions, incluent:
Il s'agit d'un jeu de rôle.]},
Ben Jackson,
Bulles,
griffes,
- 1999-1999-1999-1999-1999-1999]},
Dana, Robinson,
, Daniel Holden,
desbest,
Dervin Thunk,
dwc ,
iI Hou ,
Garen ,
[395]} haziz ,
Johan Bezem,
Jonathan Leffler,
Joshua Partogi ,
Lucas ,
Lundin,
Matt K. ,
mossplix ,
Matthieu M.,
midor ,
[415]}Nietzche-jou ,
Norman Ramsey,
r3st0r3,
ridthyself ,
Robert S. Barnes,
Steve Sommet De,
Anneau de Tim ,
Tony Bai,
VMAtm