2009-02-18 21 views
401

Esta pregunta intenta recopilar una lista mantenida por la comunidad de calidad libros en el lenguaje de programación C, dirigido a varios niveles de habilidad.The Definitive C Book Guide and List

C es un lenguaje de programación complejo que es difícil de aprender sobre la marcha leyendo tutoriales en línea. Un libro completo a menudo es la mejor manera de aprender el idioma, y ​​encontrar un buen libro es el primer paso. Es importante evitar libros mal escritos, y aún más importante, libros que contienen serios errores técnicos.

Para sugerir modificaciones a la respuesta aceptada para agregar libros de calidad, con un nivel de habilidad aproximada y una propaganda corta/descripcion de cada libro. (Tenga en cuenta que la cuestión está bloqueado, por lo que no se aceptarán nuevas respuestas. Un respuesta única se mantiene con la lista.)

dude en debatir opciones de libros, de calidad, títulos, resúmenes, niveles de habilidad y cualquier otra cosa que veas está mal. Los libros que se consideran satisfactorios por la comunidad de C aquí se quedarán en la lista; el resto será eliminado regularmente.

Para los libros que tienen las críticas de la Asociación de C y C++ Usuarios (ACU), un enlace a esas críticas deberían añadirse junto con el libro.

Consulte también:

+31

Para no menospreciar la pregunta, lo cual es bueno, pero ... la mayoría de las personas tardan años en dominar K & R. Hay más allí de lo que piensas. La delgadez del libro es engañosa. – dmckee

+4

Si es nuevo en C, tenga en cuenta que la C moderna es ANSI C y cualquier cosa anterior a esa norma (1989) puede estar muy desactualizada. Dispara a mediados de los 90 o más tarde. –

+7

@Dhaivat, creo que no, tenga cuidado de subirse al carro de K & R. K & R no aborda un buen diseño de programa ni buenas prácticas de programación, principalmente porque fue escrito originalmente antes de que nadie supiera qué buena práctica de programación era. No menciona qué partes del lenguaje C son superfluas o incluso peligrosas. El libro está correctamente enumerado como un manual de referencia, no debe usarse para enseñar/aprender la programación moderna. – Lundin

Respuesta

456

de referencia (todos los niveles)

  • The C Programming Language (2nd Edition) - Brian W. Kernighan y Dennis M. Ritchie (1988). Sigue siendo una buena, corta pero completa introducción a C, escrita por el inventor de C. Sin embargo, el lenguaje ha cambiado y el buen estilo C se ha desarrollado en los últimos 25 años, y hay partes del libro que muestran su edad.

  • C: A Reference Manual (5th Edition) - Samuel P. Harbison y Guy R. Steele (2002). Un excelente libro de referencia sobre C, hasta e incluyendo C99. No es un tutorial, y probablemente no apto para principiantes. Es genial si necesita escribir un compilador para C, como los autores tuvieron que hacer cuando comenzaron.

  • C Pocket Reference (O'Reilly) - Peter Prinz y Ulla Kirch-Prinz (2002).

  • The comp.lang.c FAQ - Steve Cumbre. Sitio web con respuestas a muchas preguntas sobre C.

  • Se pueden encontrar varias versiones de los estándares de lenguaje C here.

  • The new C standard - an annotated reference (PDF gratuito) - Derek M. Jones (2009). El "nuevo estándar" al que se hace referencia es el antiguo estándar C99 en lugar de C11.

  • Rationale for C99 Standard.


Principiante

Intermedio

  • Object-oriented Programming with ANSI-C (PDF gratuito) - Axel-Tobias Schreiner (1993). El código se complica un poco. Si quieres C++, utiliza C++.

  • C Interfaces and Implementations - David R. Hanson (1997). Proporciona información sobre cómo definir un límite entre una interfaz y la implementación en C de una manera genérica y reutilizable. También demuestra este principio al aplicarlo a la implementación de mecanismos comunes y estructuras de datos en C, como listas, conjuntos, excepciones, manipulación de cadenas, asignadores de memoria y más. Básicamente, Hanson tomó todo el código que había escrito como parte del edificio Icon y lcc y sacó las mejores partes en una forma que otras personas podrían reutilizar para sus propios proyectos. Es un modelo de buena programación en C que utiliza técnicas modernas de diseño (incluida la abstracción de datos de Liskov), que muestra cómo organizar un gran proyecto C como un conjunto de bibliotecas útiles.

  • The C Puzzle Book - Alan R. Feuer (1998)

  • The Standard C Library - P. J. Plauger (1992). Contiene el código fuente completo para una implementación de la biblioteca estándar C89, junto con una extensa discusión sobre el diseño y por qué el código está diseñado como se muestra.

  • 21st Century C: C Tips from the New School - Ben Klemens (2012). Además del lenguaje C, el libro explica gdb, valgrind, autotools y git. Los comentarios sobre el estilo se encuentran en la última parte (Capítulo 6 y más adelante).

  • Algorithms in C - Robert Sedgewick (1997). Le da una comprensión real de la implementación de algoritmos en C. Muy lúcido y claro; probablemente te haga desear tirar todos los otros libros de algoritmos y conservar este.

  • Pointers on C - Kenneth Reek (1997).

  • Pointers in C - Naveen Toppo y Hrishikesh Dewan (2013).

  • Problem Solving and Program Design in C (6th Edition) - Jeri R. Hanly y Elliot B. Koffman (2009).

  • Data Structures - An Advanced Approach Using C - Jeffrey Esakov y Tom Weiss (1989).

  • C Unleashed - Richard Heathfield, Lawrence Kirby, et al. (2000) No es ideal, pero vale la pena los programadores intermedios que practican problemas escritos en este libro. Este es un buen enfoque tipo libro de cocina sugerido por los colaboradores de comp.lang.c.

  • Modern C - Jens Gustedt (2017). Cubre C en 5 niveles (encuentro, conocimiento, cognición, experiencia, ambición) desde el principio C hasta el avanzado C. Cubre los hilos C11 y el acceso atómico, que pocos otros libros hacen y no todos los compiladores reconocen en todos los entornos.

Experto


Sin categoría

  • Essential C (PDF gratuito) - Nick Parlante (2003). Tenga en cuenta que esto describe el lenguaje C90 en varios puntos (, por ejemplo,, al comentar // comentarios y la colocación de declaraciones de variables en puntos arbitrarios en el código), por lo que debe tratarse con cierta precaución.

  • C Programming FAQs: Frequently Asked Questions - Steve Summit (1995).

  • C in a Nutshell - Peter Prinz y Tony Crawford (2005). Excelente libro si necesita una referencia para C99.

  • Functional C - Pieter Hartel y Henk Muller (1997). Enseña prácticas modernas que son invaluables para la programación de bajo nivel, teniendo en cuenta la simultaneidad y la concurrencia.

  • The Practice of Programming - Brian W. Kernighan y Rob Pike (1999). Un libro muy bueno para acompañar K & R.

  • C Traps and Pitfalls por A. Koenig (1989). Muy bien, pero el estilo C es anterior al estándar C, lo que lo hace menos recomendable en estos días.

    Algunos han abogado por la eliminación de 'Trampas y trampas' de esta lista porque ha atrapado a algunas personas a cometer errores; otros continúan abogando por su inclusión. Tal vez debería considerarse un libro "experto" porque requiere un conocimiento moderadamente extenso de C para comprender qué ha cambiado desde que se publicó.

  • Computer Systems: A Programmer's Perspective (3rd Edition) - Randal E. Bryant y David R. O'Hallaron (2015). Explica el lenguaje C en un estilo narrativo desarticulado, como Pulp Fiction.

  • Abstraction and Specification in Program Development - Barbara Liskov y John V. Guttag (1986) (no la nueva versión basada en Java por Liskov solo). Este es un texto de pregrado, con algunas ideas que vale la pena pensar.

  • Composite/Structured Design - Glenford J. Myers (1978). Este y otros libros de finales de los años setenta y principios de los ochenta de Yourdon y Myers ofrecen excelentes perspectivas sobre el diseño estructurado.

  • Build Your Own Lisp - Daniel Holden (2014). Una forma divertida de aprender C.

  • MISRA-C - estándar de la industria publicado y mantenido por Motor Industry Software Reliability Association. Cubiertas C89 y C99.

    Aunque este no es un libro como tal, cada programador de C con experiencia debe leer e implementar la mayor cantidad posible.MISRA-C se diseñó originalmente como directrices para aplicaciones críticas para la seguridad en particular, pero se aplica a cualquier área de aplicación en la que se desee un código C estable, libre de errores (¿quién no quiere menos errores?). MISRA-C se está convirtiendo en el estándar de facto en toda la industria integrada y cada vez es más popular incluso en otras ramas de programación. Hay (al menos) tres publicaciones de la norma, una de 1998, una de 2004 y una de 2012, donde la última es la relevante actualmente activa. También hay un documento de Directrices de cumplimiento de MISRA de 2016 y MISRA C: 2012, Enmienda 1: Directrices de seguridad adicionales para MISRA C: 2012 (publicado en abril de 2016).
    Tenga en cuenta que algunas de las restricciones en las reglas MISRA no son apropiadas para todos los contextos. Por ejemplo, la directiva 4.12 establece "No se utilizará la asignación de memoria dinámica". Esto puede ser apropiado en los sistemas integrados para los cuales se diseñan las reglas MISRA; no es apropiado en todas partes. (Compiladores, por ejemplo, generalmente utilizan asignación dinámica de memoria para cosas como las tablas de símbolos, y prescindir de asignación de memoria dinámica sería difícil, si no absurdo.)

  • listas archivadas de los libros reseñados-ACCU en Beginner's C (116 títulos) de 2007 y Advanced C (76 títulos) de 2008. La mayoría de estos ya no parecen estar en el sitio principal, y no se puede navegar por tema de todos modos.


Advertencias

Tenga cuidado con los libros escritos por Herbert Schildt. En particular, debe mantenerse alejado de C: The Complete Reference, conocido en algunos círculos como C: The Complete Nonsense.

También tenga cuidado con el libro "Let Us C" de Yashwant Kanetkar. Es un libro horriblemente desactualizado que enseña Turbo C y tiene mucho material obsoleto, engañoso y francamente incorrecto.

Learn C The Hard Way - Zed Shaw. A critique of this book por Tim Hentenaar:

Para resumir mis puntos de vista, los cuales se presentan a continuación, el autor presenta el material de una manera enormemente simplista y engañosa, todo el corpus es un lío liado, y algunas de las opiniones y los análisis que ofrece son simplemente incorrectos. Intenté ver este libro a través de los ojos de un novato, pero desafortunadamente estoy sesgado por años de experiencia escribiendo código en C. Es obvio para mí que o el autor tiene una interpretación errónea de C, o está simplificando deliberadamente a la punto en el que en realidad engañar al lector (intencionadamente o no.)

"aprender C la manera dura" no es un libro que podría recomendar a alguien que es a la vez aprender a programar y aprender C. Si eres Ya soy un programador competente en algún otro idioma relacionado, entonces representa una exposición interesante e inusual en C, aunque tengo reservas sobre partes del libro.Jonathan Leffler


que ha sido superado


Otros contribuyentes, no acreditado en el historial de revisión:
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, Tim Ring, Tony Bai, VMAtm

+10

[Discusión sobre meta sobre esta publicación] (https://meta.stackoverflow.com/questions/355588/the-c-book-list-has-gone-haywire-what-to-do-with-it) – Lundin