avvertimento
Questa è una lista di libri a caso di diversa qualità. Secondo alcune persone (con qualche giustificazione), non è più un elenco di libri consigliati. Alcuni dei libri elencati contengono dichiarazioni palesemente errate o insegnano pratiche sbagliate / dannose. Le persone che sono a conoscenza di tali libri possono modificare questa risposta per aiutarla a migliorarla. Vedi L'elenco dei libri C è andato in tilt. Cosa farne? e anche Audit delle domande cancellate 2018 .
Riferimento (tutti i livelli)
Principiante
Intermedio
Modern C - Jens Gustedt (2017 1st Edn; 2020 2nd Edn). Copre il C in 5 livelli (incontro, conoscenza, cognizione, esperienza, ambizione) dall'inizio C al C avanzato. Comprende C11 e C17, compresi i thread e l'accesso atomico, che pochi altri libri fanno. Non tutti i compilatori riconoscono queste funzionalità in tutti gli ambienti.
C Interfacce e implementazioni - David R. Hanson (1997). Fornisce informazioni su come definire un confine tra un'interfaccia e l'implementazione in C in modo generico e riutilizzabile. Dimostra anche questo principio applicandolo all'implementazione di meccanismi e strutture dati comuni in C, come elenchi, set, eccezioni, manipolazione di stringhe, allocatori di memoria e altro. Fondamentalmente, Hanson ha preso tutto il codice che aveva scritto come parte della costruzione di Icon e lcc e ha tirato fuori i pezzi migliori in una forma che altre persone potevano riutilizzare per i propri progetti. È un modello di buona programmazione in C che utilizza moderne tecniche di progettazione (inclusa l'astrazione dei dati di Liskov), che mostra come organizzare un grande progetto in C come un insieme di utili librerie.
The C Puzzle Book - Alan R. Feuer (1998)
The Standard C Library - PJ Plauger (1992). Contiene il codice sorgente completo per un'implementazione della libreria standard C89, insieme a un'ampia discussione sulla progettazione e sul perché il codice è progettato come mostrato.
21st Century C: C Tips from the New School - Ben Klemens (2012). Oltre al linguaggio C, il libro spiega gdb, valgrind, autotools e git. I commenti sullo stile si trovano nell'ultima parte (capitolo 6 e oltre).
Algorithms in C - Robert Sedgewick (1997). Ti dà una vera comprensione dell'implementazione degli algoritmi in C. Molto lucido e chiaro; probabilmente ti farà venire voglia di buttare via tutti gli altri libri sugli algoritmi e tenerlo qui.
Pointers on C - Kenneth Reek (1997).
Puntatori in C - Naveen Toppo e Hrishikesh Dewan (2013).
Problem Solving and Program Design in C (6ª Edizione) - Jeri R. Hanly ed Elliot B. Koffman (2009).
Strutture di dati - Un approccio avanzato usando C - Jeffrey Esakov e Tom Weiss (1989).
C scatenato - Richard Heathfield, Lawrence Kirby, et al. (2000). Non è l'ideale, ma vale la pena programmatori intermedi che praticano problemi scritti in questo libro. Questo è un buon approccio simile a un libro di cucina suggerito dai collaboratori di comp.lang.c.
Esperto
Non categorizzato
Essential C (PDF gratuito) - Nick Parlante (2003). Si noti che questo descrive il linguaggio C90 in diversi punti ( ad esempio , nella discussione di //
commenti e collocazione di dichiarazioni variabili in punti arbitrari nel codice), quindi dovrebbe essere trattato con una certa cautela.
Domande frequenti sulla programmazione C: domande frequenti - Steve Summit (1995). Questo è il libro del sito web elencato in precedenza. Non copre C99 o gli standard successivi.
C in a Nutshell - Peter Prinz e Tony Crawford (2005). Libro eccellente se hai bisogno di un riferimento per C99.
Funzionale C - Pieter Hartel e Henk Muller (1997). Insegna pratiche moderne preziose per la programmazione di basso livello, tenendo conto della concorrenza e della modularità.
The Practice of Programming - Brian W. Kernighan e Rob Pike (1999). Un ottimo libro per accompagnare K&R. Utilizza anche C ++ e Java.
Trappole e insidie di A. Koenig (1989). Molto buono, ma lo stile C precede lo standard C, il che lo rende meno raccomandabile in questi giorni.
Alcuni hanno sostenuto la rimozione di "Trappole e insidie" da questo elenco perché ha intrappolato alcune persone a fare errori; altri continuano a discutere per la sua inclusione. Forse dovrebbe essere considerato un libro di "esperti" perché richiede una conoscenza moderatamente estesa di C per capire cosa è cambiato da quando è stato pubblicato.
Costruisci il tuo Lisp - Daniel Holden (2014). Un modo divertente per imparare C.
MISRA-C - standard industriale pubblicato e gestito dall'associazione di affidabilità del software per l'industria automobilistica. Copre C89 e C99.
Sebbene questo non sia un libro in quanto tale, molti programmatori raccomandano di leggere e implementare il più possibile. MISRA-C era originariamente inteso come linee guida per le applicazioni critiche per la sicurezza in particolare, ma si applica a qualsiasi area di applicazione in cui si desidera un codice C stabile e privo di bug (chi non desidera meno bug?). MISRA-C sta diventando lo standard di fatto in tutto il settore embedded e sta diventando sempre più popolare anche in altri settori di programmazione. Esistono (almeno) tre pubblicazioni dello standard (1998, 2004 e la versione attuale del 2012). Esiste anche un documento delle Linee guida di conformità MISRA del 2016 e MISRA C: 2012 Emendamento 1 - Linee guida di sicurezza aggiuntive per MISRA C: 2012 (pubblicato ad aprile 2016).
Si noti che alcune delle restrizioni nelle regole MISRA non sono appropriate per ogni contesto. Ad esempio, la direttiva 4.12 stabilisce che "L'allocazione dinamica della memoria non deve essere utilizzata". Ciò è appropriato nei sistemi embedded per i quali sono progettate le regole MISRA; non è appropriato ovunque. (I compilatori, ad esempio, usano generalmente l'allocazione dinamica della memoria per cose come le tabelle dei simboli e fare a meno dell'allocazione dinamica della memoria sarebbe difficile, se non assurdo.)
Elenchi archiviati di libri recensiti da ACCU su Beginner's C (116 titoli) dal 2007 e Advanced C (76 titoli) dal 2008. La maggior parte di questi non sembra più trovarsi sul sito principale e non è possibile sfogliarli per argomento Comunque.
Avvertenze
Diffidare dei libri scritti da Herbert Schildt . In particolare, dovresti stare lontano da C: The Complete Reference (4th Edition, 2000), noto in alcuni ambienti come C: The Complete Nonsense.
Inoltre, non utilizzare il libro Let Us C (16 ° edizione, 2017) da Yashwant Kanetkar. Molte persone lo vedono come un libro obsoleto che insegna Turbo C e ha un sacco di materiale obsoleto, fuorviante e errato. Ad esempio, pagina 137 discute l'output previsto da printf("%d %d %d\n", a, ++a, a++)
e non lo classifica come un comportamento indefinito come dovrebbe.
Scopri C The Hard Way (2015) di Zed Shaw. Un libro con recensioni contrastanti.
Una critica di questo libro di Tim Hentenaar:
Per riassumere le mie opinioni, che sono esposte di seguito, l'autore presenta il materiale in un modo molto semplificato e fuorviante, l'intero corpus è un disastro, e alcune delle opinioni e delle analisi che offre sono semplicemente sbagliate. Ho provato a vedere questo libro attraverso gli occhi di un novizio, ma sfortunatamente sono influenzato da anni di esperienza nella scrittura di codice in C. È ovvio per me che l'autore ha una comprensione imperfetta di C, o sta deliberatamente semplificando eccessivamente il punto in cui in realtà sta fuorviando il lettore (intenzionalmente o meno).
"Learn C The Hard Way" non è un libro che potrei raccomandare a qualcuno che sta entrambi imparando a programmare e ad imparare C. Se sei già un programmatore competente in qualche altra lingua correlata, allora rappresenta un'esposizione interessante e insolita su C, anche se ho delle riserve su alcune parti del libro. Jonathan Leffler
outdated
Altri collaboratori , non necessariamente accreditati nella cronologia delle revisioni, includono:
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