Esta pergunta tenta coletar uma lista mantida pela comunidade de livros de qualidade noc linguagem de programação, direcionada a vários níveis de habilidade.
C é uma linguagem de programação complexa que é difícil de entender em movimento lendo os tutoriais on-line. Um livro abrangente geralmente é a melhor maneira de aprender o idioma, e encontrar um bom livro é o primeiro passo. É importante evitar livros mal escritos e, mais importante ainda, livros que contenham erros técnicos sérios.
Sugira edições à resposta aceita para adicionar livros de qualidade, com um nível de habilidade aproximado e uma breve descrição / descrição sobre cada livro. ( Observe que a pergunta está bloqueada, portanto, nenhuma nova resposta será aceita. Uma única resposta está sendo mantida com a lista )
Sinta-se à vontade para debater escolhas, qualidade, títulos, resumos, níveis de habilidade e qualquer outra coisa que você vê que está errada. Os livros que a comunidade C considera satisfatórios aqui permanecerão na lista; o resto será removido regularmente.
Para livros com resenhas da Associação de Usuários de C e C ++ (ACCU), um link para essas resenhas deve ser adicionado junto com o livro.
Veja também:
- Outros recursos relacionados ao C no c tag wiki
- Uma lista semelhante para c ++: Guia e lista definitiva de livros em C ++
Esta questão foi discutida no Meta como parte da Auditoria de perguntas excluídas 2018 .
O consenso era mantê-lo sem alterações e com manutenção ativa.
Respostas:
Atenção
Esta é uma lista de livros aleatórios de qualidade diversa. Na opinião de algumas pessoas (com alguma justificativa), não é mais uma lista de livros recomendados. Alguns dos livros listados contêm declarações flagrantemente incorretas ou ensinam práticas erradas / prejudiciais. As pessoas que conhecem esses livros podem editar esta resposta para ajudar a melhorá-la. Consulte A lista de livros em C deu errado. O que fazer com isso? , e também Auditoria de perguntas excluídas 2018 .
Referência (todos os níveis)
A Linguagem de Programação C (2ª Edição) - Brian W. Kernighan e Dennis M. Ritchie (1988). Ainda é uma introdução boa, curta mas completa ao C (C90, não C99 ou versões posteriores), escrita pelo inventor de C. No entanto, a linguagem mudou e o bom estilo C se desenvolveu nos últimos 25 anos, e há partes de o livro que mostra sua idade.
C: A Reference Manual (5th Edition) - Samuel P. Harbison e Guy R. Steele (2002). Um excelente livro de referência em C, até e inclusive C99. Não é um tutorial, e provavelmente impróprio para iniciantes. É ótimo se você precisar escrever um compilador para C, como os autores precisavam fazer quando começaram.
C Referência de bolso (O'Reilly) - Peter Prinz e Ulla Kirch-Prinz (2002).
O FAQ do comp.lang.c - Steve Summit. Site com respostas para muitas perguntas sobre C.
Várias versões dos padrões da linguagem C podem ser encontradas aqui . Existe uma versão online do rascunho da norma C11 .
O novo padrão C - uma referência anotada (PDF grátis) - Derek M. Jones (2009). O "novo padrão" referido é o antigo padrão C99, e não o C11.
Justificativa para o padrão C99 .
Principiante
Programação C: Uma Abordagem Moderna (2ª Edição) - KN King (2008). Um bom livro para aprender C.
Programação em C (4ª Edição) - Stephen Kochan (2014). Uma boa introdução geral e tutorial.
C Primer Plus (5ª Edição) - Stephen Prata (2004)
Um livro sobre C - Al Kelley / Ira Pohl (1998).
The C Book (Free Online) - Mike Banahan, Declan Brady e Mark Doran (1991).
C: Como programar (8ª edição) - Paul Deitel e Harvey M. Deitel (2015). Muitas dicas e boas práticas para iniciantes. O índice é muito bom e serve como uma referência decente (apenas não totalmente abrangente e muito superficial).
Head First C - David Griffiths e Dawn Griffiths (2012).
Começo C (5ª Edição) - Ivor Horton (2013). Muito boa explicação dos ponteiros, usando muitos programas pequenos, mas completos.
Sams ensina-se C em 21 dias - Bradley L. Jones e Peter Aitken (2002). Muito bom material introdutório.
Programação de Aplicações em ANSI C - Richard Johnsonbaugh e Martin Kalin (1996).
Intermediário
Modern C - Jens Gustedt (1º Edn de 2017; 2º Edn de 2020). Abrange C em 5 níveis (encontro, conhecimento, cognição, experiência, ambição) do início C ao avançado C. Abrange C11 e C17, incluindo threads e acesso atômico, o que poucos outros livros fazem. Nem todos os compiladores reconhecem esses recursos em todos os ambientes.
C Interfaces e implementações - David R. Hanson (1997). Fornece informações sobre como definir um limite entre uma interface e implementação em C de maneira genérica e reutilizável. Ele também demonstra esse princípio aplicando-o à implementação de mecanismos e estruturas de dados comuns em C, como listas, conjuntos, exceções, manipulação de cadeias, alocadores de memória e muito mais. Basicamente, Hanson pegou todo o código que ele havia escrito como parte da construção de Icon e lcc e retirou os melhores bits de uma forma que outras pessoas poderiam reutilizar em seus próprios projetos. É um modelo de boa programação C usando técnicas modernas de design (incluindo a abstração de dados de Liskov), mostrando como organizar um grande projeto C como um monte de bibliotecas úteis.
The C Puzzle Book - Alan R. Feuer (1998)
A biblioteca C padrão - PJ Plauger (1992). Ele contém o código fonte completo para uma implementação da biblioteca padrão C89, juntamente com uma extensa discussão sobre o design e por que o código foi projetado como mostrado.
Século XXI C: C Dicas da Nova Escola - Ben Klemens (2012). Além da linguagem C, o livro explica gdb, valgrind, autotools e git. Os comentários sobre estilo são encontrados na última parte (capítulo 6 e além).
Algoritmos em C - Robert Sedgewick (1997). Oferece uma compreensão real dos algoritmos de implementação em C. Muito lúcido e claro; provavelmente fará com que você queira jogar fora todos os outros livros de algoritmos e manter este.
Ponteiros em C - Kenneth Reek (1997).
Ponteiros em C - Naveen Toppo e Hrishikesh Dewan (2013).
Resolução de Problemas e Design de Programas em C (6ª Edição) - Jeri R. Hanly e Elliot B. Koffman (2009).
Estruturas de dados - uma abordagem avançada usando C - Jeffrey Esakov e Tom Weiss (1989).
C Desencadeado - Richard Heathfield, Lawrence Kirby, et al. (2000) Não é o ideal, mas vale a pena programadores intermediários praticarem os problemas escritos neste livro. Essa é uma boa abordagem semelhante a um livro de receitas sugerida por colaboradores do comp.lang.c.
Especialista
Programação C especializada: Deep C Secrets - Peter van der Linden (1994). Muitas informações interessantes e histórias de guerra da equipe de compiladores da Sun, mas um pouco datadas em alguns lugares.
Programação C avançada por exemplo - John W. Perry (1998).
Programação avançada no ambiente UNIX - Richard W. Stevens e Stephen A. Rago (2013). Descrição abrangente de como usar as APIs Unix do código C, mas não muito sobre a mecânica da codificação C.
Sem categoria
Essential C (PDF gratuito) - Nick Parlante (2003). Observe que isso descreve a linguagem C90 em vários pontos ( por exemplo , na discussão de
//
comentários e na colocação de declarações de variáveis em pontos arbitrários do código); portanto, deve ser tratado com alguma cautela.C Perguntas freqüentes sobre programação: perguntas freqüentes - Steve Summit (1995). Este é o livro do site listado anteriormente. Não cobre C99 ou os padrões posteriores.
C em poucas palavras - Peter Prinz e Tony Crawford (2005). Excelente livro, se você precisar de uma referência para C99.
C funcional - Pieter Hartel e Henk Muller (1997). Ensina práticas modernas que são inestimáveis para programação de baixo nível, com simultaneidade e modularidade em mente.
A Prática da Programação - Brian W. Kernighan e Rob Pike (1999). Um livro muito bom para acompanhar K&R. Ele também usa C ++ e Java.
C Armadilhas e Armadilhas de A. Koenig (1989). Muito bom, mas o estilo C antecede o padrão C, o que o torna menos recomendável atualmente.
Alguns argumentaram pela remoção de 'Armadilhas e Armadilhas' desta lista, porque prendeu algumas pessoas a cometer erros; outros continuam a defender sua inclusão. Talvez deva ser considerado um livro de "especialistas" porque requer um conhecimento moderadamente extenso de C para entender o que mudou desde que foi publicado.
Crie seu próprio Lisp - Daniel Holden (2014). Uma maneira agradável de aprender C.
MISRA-C - padrão da indústria publicado e mantido pela Motor Industry Software Reliability Association. Abrange C89 e C99.
Embora esse livro não seja um livro, muitos programadores recomendam a leitura e a implementação o máximo possível. O MISRA-C foi originalmente concebido como diretrizes para aplicações críticas de segurança em particular, mas se aplica a qualquer área de aplicação em que seja desejado um código C estável e sem erros (quem não quer menos bugs?). O MISRA-C está se tornando o padrão de fato em toda a indústria incorporada e está se tornando cada vez mais popular, mesmo em outros ramos de programação. Existem (pelo menos) três publicações do padrão (1998, 2004 e a versão atual de 2012). Há também um documento das Diretrizes de conformidade da MISRA de 2016 e a Emenda 1 da MISRA C: 2012: Diretrizes adicionais de segurança para a MISRA C: 2012 (publicada em abril de 2016).
Observe que algumas das restrições nas regras MISRA não são apropriadas para todos os contextos. Por exemplo, a diretiva 4.12 indica "A alocação dinâmica de memória não deve ser usada". Isso é apropriado nos sistemas incorporados para os quais as regras MISRA são projetadas; não é apropriado em qualquer lugar. (Os compiladores, por exemplo, geralmente usam alocação de memória dinâmica para coisas como tabelas de símbolos, e ficar sem alocação de memória dinâmica seria difícil, se não absurdo.)
Listas arquivadas de livros revisados pela ACCU no C para iniciantes (116 títulos) de 2007 e no Avançado C (76) de 2008. A maioria deles não parece mais estar no site principal, e você não pode procurar por assunto de qualquer forma.
Advertências
Desconfie de livros escritos por Herbert Schildt . Em particular, você deve ficar longe de C: The Complete Reference (4ª Edição, 2000), conhecido em alguns círculos como C: The Complete Nonsense.
Também não use o livro Let Us C (16 ª edição, 2017) de Yashwant Kanetkar. Muitas pessoas o veem como um livro desatualizado que ensina o Turbo C e tem muito material obsoleto, enganoso e incorreto. Por exemplo, a página 137 discute a saída esperada
printf("%d %d %d\n", a, ++a, a++)
e não a categoriza como comportamento indefinido como deveria.Learn C The Hard Way (2015) de Zed Shaw. Um livro com críticas mistas. Uma crítica a este livro de Tim Hentenaar:
"Aprenda C da maneira mais difícil" não é um livro que eu poderia recomendar a alguém que está aprendendo a programar e aprendendo C. Se você já é um programador competente em algum outro idioma relacionado, isso representa uma exposição interessante e incomum sobre C, embora eu tenha reservas sobre partes do livro. Jonathan Leffler
Desatualizado
Outros colaboradores , não necessariamente creditados no histórico de revisões, incluem:
Alex Lockwood , Ben Jackson , Bubbles , garras , coledot , Dana Robinson , Daniel Holden , Dervin Thunk , dwc , Erci Hou , Garen , Haziz , Johan Bezem , Jonathan Leffler , Joshua e 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
fonte
<Modern C>
muito vale a pena ler, ele usa muita sintaxe c99 & c11, muito compacta e bem escrita. E sabe de uma coisa? É grátis !!! Você pode fazer o download da versão mais recente em pdf aqui: icube-icps.unistra.fr/img_auth.php/d/db/ModernC.pdf (BTW, parece que o autor está atualizando e publicando o livro no link acima, conforme necessário)