La guida e l'elenco dei libri C definitivi


400

Questa domanda tenta di raccogliere un elenco gestito dalla comunità di libri di qualità su Internet linguaggio di programmazione, mirato a vari livelli di abilità.

C è un linguaggio di programmazione complesso che è difficile da imparare in movimento leggendo tutorial online. Un libro completo è spesso il modo migliore per imparare la lingua e trovare un buon libro è il primo passo. È importante evitare libri scritti male e, cosa ancora più importante, libri che contengono gravi errori tecnici.

Ti preghiamo di suggerire le modifiche alla risposta accettata per aggiungere libri di qualità, con un livello di abilità approssimativo e una breve descrizione / descrizione di ogni libro. ( Si noti che la domanda è bloccata, quindi non verranno accettate nuove risposte. Viene mantenuta un'unica risposta con l'elenco )

Sentiti libero di discutere le scelte del libro, la qualità, i titoli, i riassunti, i livelli di abilità e tutto ciò che vedi che è sbagliato. I libri ritenuti soddisfacenti dalla comunità C qui rimarranno nell'elenco; il resto verrà rimosso regolarmente.

Per i libri che hanno recensioni da parte dell'Associazione degli utenti C e C ++ (ACCU), è necessario aggiungere un collegamento a tali recensioni insieme al libro.

Guarda anche:


Questa domanda è stata discussa su Meta nell'ambito dell'Audit Domande Eliminate 2018 .
Il consenso è stato quello di mantenerlo non eliminato e attivamente mantenuto.


31
Non sminuire la domanda, il che è positivo, ma ... molte persone impiegano anni per padroneggiare K&R. C'è di più lì dentro di quanto pensi. La magrezza del libro è ingannevole.
dmckee --- ex gattino moderatore,

4
Se non conosci C, tieni presente che la C moderna è ANSI C e qualsiasi cosa che precede tale standard (1989) potrebbe essere decisamente obsoleta. Scatta per la metà degli anni '90 o più tardi.
Dana Robinson,

7
@Dhaivat Penso di no, stai attento a saltare sul carrozzone K&R. K&R non si rivolge alla buona progettazione del programma né alle buone pratiche di programmazione, principalmente perché è stato originariamente scritto prima che qualcuno sapesse quale fosse la buona pratica di programmazione. Non menziona quali parti del linguaggio C sono superflue o addirittura pericolose. Il libro è correttamente elencato come manuale di riferimento, non dovrebbe essere usato per insegnare / apprendere la programmazione moderna.
Lundin,

Concordo con Dana sul fatto che nulla di scritto prima delle norme ANSI / ISO dell'89 / 90 dovrebbe apparire in un elenco come questo. Puoi anche considerare di indicare quali libri si rivolgono a C99 e quali no.
Lundin,

Risposte:


492

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


6
@ PabloBarríaUrenda I contenuti non idonei devono essere risolti contrassegnando il post. "Due clic di distanza" è una frase sciocca, quindi la tua bandiera verrebbe probabilmente respinta. E qualsiasi dibattito sul fatto che la bandiera menzionata sia offensiva o meno non dovrebbe essere qui. Pubblica invece tali dubbi su meta.stackoverflow.com .
Lundin,

1
Cosa c'è di sciocco in "due clic di distanza"?
Pablo Barría Urenda,

3
Come nel 2019, ho trovato il libro che <Modern C>vale la pena leggere, che usa molta sintassi c99 e c11, molto compatto e ben scritto. E tu sai cosa? È gratis !!! Puoi scaricare l'ultima versione in pdf qui: icube-icps.unistra.fr/img_auth.php/d/db/ModernC.pdf (A proposito, sembra che l'autore stia aggiornando e pubblica il libro al link sopra se necessario)
Eric Wang

1
Stavo per aggiungere un libro solo per rendermi conto che era stato pubblicato come non raccomandato. Forse lasciare quelli visibili nel post citando i motivi per cui dovrebbe essere evitato. Forse anche una sezione separata di libri NON consigliati?
gst

3
Ho provato a modificare senza successo la risposta (apparentemente a causa di una formattazione errata, che viene visualizzata anche prima ancora di apportare una modifica). Ad ogni modo, almeno due libri consigliati sono elencati come "da evitare" qui: iso-9899.info/wiki/Main_Page#Stuff_that_should_be_avoided . Rimuovi "Costruisci il tuo Lisp" e "Impara C nel modo più duro" e aggiungi il link sopra alla sezione Avvertenze .
gst
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.