Guia e lista definitivas do livro C

400

Esta pergunta tenta coletar uma lista mantida pela comunidade de livros de qualidade no 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:


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.

lillq
fonte
31
Não para menosprezar a pergunta, o que é bom, mas ... a maioria das pessoas leva anos para dominar a K&R. Há mais do que você pensa. A magreza do livro é enganosa.
dmckee --- ex-moderador gatinho
4
Se você é novo em C, lembre-se de que C moderno é ANSI C e qualquer coisa anterior a esse padrão (1989) pode estar desatualizada. Fotografe em meados dos anos 90 ou mais tarde.
Dana Robinson
7
@ Dhaivat, acho que não, tenha cuidado para pular na onda da K&R. O K&R não trata de boas práticas de programação nem de boas práticas de programação, principalmente porque foi originalmente escrito antes que alguém soubesse o que eram boas práticas de programação. Não menciona quais partes da linguagem C são supérfluas ou até perigosas. O livro está listado corretamente como um manual de referência, não deve ser usado para ensinar / aprender programação moderna.
Lundin
Concordo com Dana que nada escrito antes das padronizações ANSI / ISO em 89/90 deve aparecer em uma lista como esta. Você também pode declarar quais livros abordam C99 e quais não abordam.
Lundin

Respostas:

492

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)


Principiante

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


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:

Para resumir minhas opiniões, que são apresentadas abaixo, o autor apresenta o material de uma maneira muito simplificada e enganosa, todo o corpus é uma bagunça, e algumas das opiniões e análises que ele oferece estão completamente erradas. Tentei ver este livro pelos olhos de um iniciante, mas infelizmente sou influenciado por anos de experiência escrevendo código em C. É óbvio para mim que ou o autor tem um entendimento defeituoso de C ou está deliberadamente simplificando demais o ponto em que ele está realmente enganando o leitor (intencionalmente ou não).

"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

Jonathan Leffler
fonte
6
@ PabloBarríaUrenda Conteúdo inadequado deve ser abordado sinalizando a publicação. "Dois cliques de distância" é uma afirmação boba, portanto sua bandeira provavelmente seria rejeitada. E qualquer debate sobre se a bandeira mencionada é ofensiva ou não também não deveria estar aqui. Poste essas preocupações em meta.stackoverflow.com .
Lundin
11
O que é bobagem em "dois cliques de distância"?
Pablo Barría Urenda 27/02/19
3
Como no ano de 2019, achei o livro <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)
Eric Wang
11
Eu estava prestes a adicionar um livro apenas para perceber que ele foi editado como não recomendado. Talvez deixe aqueles visíveis no post citando as razões pelas quais isso deve ser evitado. Talvez até uma seção separada dos livros NÃO recomendados?
gst
3
Tentei, sem sucesso, editar a resposta (aparentemente devido a formatação incorreta, que aparece antes mesmo de eu fazer uma edição). De qualquer forma, pelo menos dois livros recomendados estão listados como "a serem evitados" aqui: iso-9899.info/wiki/Main_Page#Stuff_that_should_be_avoided . Por favor, remova "Crie seu próprio Lisp" e "Aprenda C da maneira mais difícil" e adicione o link acima à seção Avisos .
GST