A lista e o guia definitivo do livro C

Feb 19 2009

Esta questão tenta coletar uma lista mantida pela comunidade de livros de qualidade sobre a linguagem de programação c , direcionada a vários níveis de habilidade.

C é uma linguagem de programação complexa que é difícil de aprender em movimento lendo tutoriais online. 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, ainda mais importante, livros que contenham erros técnicos graves.

Por favor, sugira edições para a resposta aceita para adicionar livros de qualidade, com um nível de habilidade aproximado e uma breve sinopse / descrição sobre cada livro. ( Observe que a pergunta está bloqueada, então nenhuma resposta nova será aceita. Uma única resposta está sendo mantida com a lista )

Sinta-se à vontade para debater as escolhas do livro, qualidade, títulos, resumos, níveis de habilidade e qualquer outra coisa que você vir que esteja errada. Os livros considerados satisfatórios pela comunidade C aqui permanecerão na lista; o resto será removido regularmente.

Para livros que têm resenhas da Association of C and C ++ Users (ACCU), um link para essas resenhas deve ser adicionado junto com o livro.

Veja também:

  • Outros recursos relacionados a C no wiki c tag
  • Uma lista semelhante para c ++ : The Definitive C ++ Book Guide and List

Esta questão foi discutida em Meta como parte da Auditoria de Perguntas Excluídas 2018 .
O consenso era mantê-lo recuperado e mantido ativamente.

Respostas

503 JonathanLeffler Feb 19 2009 at 01:54

Atenção !

Esta é uma lista de livros aleatórios de qualidade diversa. Na visã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. Veja que a lista de livros C enlouqueceu. O que fazer com isso? , e também de auditoria de questão excluída 2018 .

Referência (todos os níveis)

  • The C Programming Language (2ª edição) - Brian W. Kernighan e Dennis M. Ritchie (1988). Ainda uma boa, curta mas completa introdução a C (C90, não C99 ou versões posteriores), escrita pelo inventor de C. No entanto, a linguagem mudou e um 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 incluindo C99. Não é um tutorial e provavelmente impróprio para iniciantes. É ótimo se você precisa escrever um compilador para C, como os autores tiveram que fazer quando começaram.

  • Referência de bolso C (O'Reilly) - Peter Prinz e Ulla Kirch-Prinz (2002).

  • O FAQ comp.lang.c - Steve Summit. Site com respostas a 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 do padrão 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 em vez de 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 práticas recomendadas para iniciantes. O índice é muito bom e serve como uma referência decente (apenas não totalmente abrangente e muito superficial).

  • Use a Cabeça C - David Griffiths e Dawn Griffiths (2012).

  • Beginning C (5ª edição) - Ivor Horton (2013). Explicação de ponteiros muito boa, usando muitos programas pequenos, mas completos.

  • Sams Teach Yourself C in 21 Days - Bradley L. Jones e Peter Aitken (2002). Muito bom material introdutório.

Intermediário

  • Modern C - Jens Gustedt (2017 1ª Edn; 2020 2ª Edn). Cobre C em 5 níveis (encontro, conhecimento, cognição, experiência, ambição) de C inicial a C avançado. Cobre C11 e C17, incluindo tópicos e acesso atômico, o que poucos outros livros fazem. Nem todos os compiladores reconhecem esses recursos em todos os ambientes.

  • Interfaces e implementações C - David R. Hanson (1997). Fornece informações sobre como definir um limite entre uma interface e a implementação em C de uma forma genérica e reutilizável. Ele também demonstra esse princípio aplicando-o à implementação de mecanismos comuns e estruturas de dados em C, como listas, conjuntos, exceções, manipulação de strings, alocadores de memória e muito mais. Basicamente, Hanson pegou todo o código que ele escreveu como parte da construção do Icon e do lcc e retirou os melhores pedaços de uma forma que outras pessoas pudessem reutilizar em seus próprios projetos. É um modelo de boa programação C usando técnicas de design modernas (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)

  • The Standard C Library - PJ Plauger (1992). Ele contém o código-fonte completo para uma implementação da biblioteca padrão C89, junto com uma ampla discussão sobre o design e por que o código é projetado conforme mostrado.

  • 21st Century C: C Tips from the New School - Ben Klemens (2012). Além da linguagem C, o livro explica gdb, valgrind, autotools e git. Os comentários sobre o estilo são encontrados na última parte (Capítulo 6 e além).

  • Algoritmos em C - Robert Sedgewick (1997). Oferece uma compreensão real da implementação de algoritmos em C. Muito lúcido e claro; provavelmente fará você querer jogar fora todos os seus outros livros de algoritmos e ficar com este.

  • Ponteiros em C - Kenneth Reek (1997).
  • 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 Unleashed - Richard Heathfield, Lawrence Kirby, et al. (2000). Não é o ideal, mas vale a pena os programadores intermediários praticarem os problemas escritos neste livro. Esta é uma boa abordagem semelhante a um livro de receitas, sugerida pelos colaboradores do comp.lang.c.

  • Programação orientada a objetos com ANSI-C (PDF grátis) - Axel-Tobias Schreiner (1993). O código fica um pouco complicado. Se você quiser C ++, use C ++. Ele usa apenas o C90, é claro.

Especialista

  • Expert C Programming: 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 desatualizadas em alguns lugares.

  • Programação Avançada em C 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 do Unix a partir do código C, mas não tanto sobre a mecânica da codificação C.


Sem categoria

  • Essential C (PDF grátis) - Nick Parlante (2003). Observe que isso descreve a linguagem C90 em vários pontos ( por exemplo , na discussão de //comentários e colocação de declarações de variáveis ​​em pontos arbitrários no código), portanto, deve ser tratada com algum cuidado.

  • FAQs de Programação C: Perguntas Mais Freqüentes - Steve Summit (1995). Este é o livro do site listado anteriormente. Não cobre o C99 ou os padrões posteriores.

  • C in a Nutshell - Peter Prinz e Tony Crawford (2005). Excelente livro se você precisar de uma referência para C99.

  • Funcional C - 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.

  • The Practice of Programming - Brian W. Kernighan e Rob Pike (1999). Um livro muito bom para acompanhar K&R. Ele também usa C ++ e Java.

  • C Traps and Pitfalls de A. Koenig (1989). Muito bom, mas o estilo C é anterior ao padrão C, o que o torna menos recomendável atualmente.

    Alguns argumentaram pela remoção de 'Armadilhas e armadilhas' desta lista porque ela prendeu algumas pessoas a cometer erros; outros continuam a defender sua inclusão. Talvez deva ser considerado um livro 'especializado' porque requer um conhecimento moderadamente extenso de C para entender o que mudou desde que foi publicado.

  • MISRA-C - padrão da indústria publicado e mantido pela Motor Industry Software Reliability Association. Cobre C89 e C99.

    Embora este não seja um livro propriamente dito, muitos programadores recomendam a leitura e a implementação dele tanto quanto possível. MISRA-C foi originalmente planejado como um guia para aplicativos críticos de segurança em particular, mas se aplica a qualquer área de aplicação onde um código C estável e livre de bugs é desejado (quem não quer menos bugs?). O MISRA-C está se tornando o padrão de fato em toda a indústria de embarcados e está se tornando cada vez mais popular, mesmo em outros ramos de programação. Existem (pelo menos) três publicações da norma (1998, 2004 e a versão atual de 2012). Há também um documento de Diretrizes de conformidade MISRA de 2016 e MISRA C: 2012 Alteração 1 - Diretrizes de segurança adicionais para MISRA C: 2012 (publicada em abril de 2016).

    Observe que algumas das restrições nas regras MISRA não são adequadas a todos os contextos. Por exemplo, a diretiva 4.12 declara "A alocação de memória dinâmica não deve ser usada". Isso é apropriado em sistemas embarcados para os quais as regras MISRA foram projetadas; não é apropriado em todos os lugares. (Compiladores, por exemplo, geralmente usam alocação de memória dinâmica para coisas como tabelas de símbolos, e fazer sem alocação de memória dinâmica seria difícil, se não absurdo.)

  • Listas arquivadas de livros revisados ​​pela ACCU sobre Beginner's C (116 títulos) de 2007 e Advanced C (76 títulos) de 2008. A maioria deles não parece mais estar no site principal, e você não pode navegar por assunto de qualquer forma.


Avisos

Há uma lista de livros e tutoriais sobre os quais se deve ter cuidado no ISO 9899 Wiki , que não está formalmente associado ao ISO ou ao padrão C, mas contém informações sobre o padrão C (embora seja o lançamento do ISO 9899: 2011 e não menciona o lançamento da ISO 9899: 2018).

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 th Edition, 2017) de Yashwant Kanetkar. Muitas pessoas o veem como um livro desatualizado que ensina 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. Ele também promove de forma consistente práticas de codificação não portáveis ​​e cheias de erros, como usar gets, %[\n]sem scanf, armazenar o valor de retorno de getcharem uma variável do tipo charou usar fflushon stdin.

Aprenda 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 meus pontos de vista, que são apresentados abaixo, o autor apresenta o material de uma forma extremamente simplificada e enganosa, todo o corpus é uma bagunça e algumas das opiniões e análises que ele oferece estão simplesmente erradas. Eu tentei ver este livro através dos olhos de um novato, mas infelizmente sou influenciado por anos de experiência escrevendo código em C. É óbvio para mim que o autor tem uma compreensão falha de C ou está deliberadamente simplificando demais para o ponto onde ele está realmente enganando o leitor (intencionalmente ou não).

"Learn C The Hard Way" 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 alguma outra linguagem relacionada, então ele representa uma exposição interessante e incomum sobre C, embora eu tenha reservas sobre partes do livro. Jonathan Leffler


Desatualizado

  • Practical C Programming (3ª edição) - Steve Oualline (1997) (iniciante)

Outros colaboradores , não necessariamente creditados no histórico de revisão, incluem:
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