La guía y lista definitiva de libros en C

400

Esta pregunta intenta recopilar una lista mantenida por la comunidad de libros de calidad en el lenguaje de programación, dirigido a varios niveles de habilidad.

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 es a menudo la mejor manera de aprender el idioma, y ​​encontrar un buen libro es el primer paso. Es importante evitar los libros mal escritos y, lo que es más importante, los libros que contienen errores técnicos graves.

Sugiera modificaciones a la respuesta aceptada para agregar libros de calidad, con un nivel de habilidad aproximado y una breve descripción de cada libro. ( Tenga en cuenta que la pregunta está bloqueada, por lo que no se aceptarán nuevas respuestas. Se mantiene una sola respuesta con la lista )

No dude en debatir las opciones de libros, la calidad, los títulos, los resúmenes, los niveles de habilidad y cualquier otra cosa que vea que esté mal. Los libros que la comunidad C considera satisfactorios aquí permanecerán en la lista; El resto se eliminará regularmente.

Para los libros que tienen reseñas de la Asociación de Usuarios de C y C ++ (ACCU), se debe agregar un enlace a esas reseñas junto con el libro.

Ver también:


Esta pregunta se discutió en Meta como parte de la auditoría de preguntas eliminadas 2018 .
El consenso fue mantenerlo intacto y mantenido activamente.

lillq
fuente
31
No para menospreciar la pregunta, que es buena, 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 --- ex-gatito moderador
44
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.
Dana Robinson
77
@Dhaivat Creo que no, ten cuidado de subirte al carro de K&R. K&R no aborda un buen diseño de programa ni una buena práctica de programación, principalmente porque fue escrito originalmente antes de que nadie supiera qué era una buena práctica de programación. No menciona qué partes del lenguaje C son superfluas o incluso peligrosas. El libro está listado correctamente como manual de referencia, no debe usarse para enseñar / aprender programación moderna.
Lundin
Estoy de acuerdo con Dana en que nada escrito antes de las estandarizaciones ANSI / ISO en 89/90 debería aparecer en una lista como esta. También puede considerar indicar qué libros abordan C99 y cuáles no.
Lundin

Respuestas:

492

Advertencia

Esta es una lista de libros aleatorios de diversa calidad. En opinión de algunas personas (con alguna justificación), ya no es una lista de libros recomendados. Algunos de los libros enumerados contienen declaraciones descaradamente incorrectas o enseñan prácticas incorrectas / dañinas. Las personas que conocen estos libros pueden editar esta respuesta para ayudar a mejorarla. Ver La lista de libros C se ha vuelto loca. ¿Qué hacer con ello? , y también Auditoría de preguntas eliminadas 2018 .

Referencia (todos los niveles)


Principiante

Intermedio

  • Modern C - Jens Gustedt (2017 1st Edn; 2020 2nd Edn). Cubre C en 5 niveles (encuentro, conocimiento, cognición, experiencia, ambición) desde el principio C hasta el avanzado C. Cubre C11 y C17, incluidos hilos y acceso atómico, que pocos otros libros hacen. No todos los compiladores reconocen estas características en todos los entornos.

  • C Interfaces e implementaciones - David R. Hanson (1997). Proporciona información sobre cómo definir un límite entre una interfaz y la implementación en C de forma 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 de la construcción de Icon y lcc y sacó los mejores fragmentos 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 de diseño modernas (incluida la abstracción de datos de Liskov), que muestra cómo organizar un gran proyecto en C como un conjunto de bibliotecas útiles.

  • El libro del rompecabezas C - Alan R. Feuer (1998)

  • The Standard C Library - PJ 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.

  • Siglo XXI C: C Consejos de la nueva escuela - 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).

  • Algoritmos en C - Robert Sedgewick (1997). Le da una idea real de la implementación de algoritmos en C. Muy lúcido y claro; probablemente hará que quieras tirar todos tus otros libros de algoritmos y conservar este.

  • Punteros sobre C - Kenneth Reek (1997).

  • Punteros en C - Naveen Toppo y Hrishikesh Dewan (2013).

  • Resolución de problemas y diseño de programas en C (6ª edición) - Jeri R. Hanly y Elliot B. Koffman (2009).

  • Estructuras de datos: un enfoque avanzado con C - Jeffrey Esakov y Tom Weiss (1989).

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

Experto


Sin categorizar

  • Essential C (PDF gratuito) - Nick Parlante (2003). Tenga en cuenta que esto describe el lenguaje C90 en varios puntos ( p . Ej. , Al analizar los //comentarios y la ubicación de declaraciones de variables en puntos arbitrarios del código), por lo que debe tratarse con cierta precaución.

  • C Preguntas frecuentes sobre programación: Preguntas frecuentes - Steve Summit (1995). Este es el libro del sitio web mencionado anteriormente. No cubre C99 o los estándares posteriores.

  • C en pocas palabras - Peter Prinz y Tony Crawford (2005). Excelente libro si necesita una referencia para C99.

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

  • La práctica de la programación - Brian W. Kernighan y Rob Pike (1999). Un muy buen libro para acompañar a K&R. Utiliza C ++ y Java también.

  • C Trampas y trampas 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 defendiendo su inclusión. Quizás debería considerarse como un libro "experto" porque requiere un conocimiento moderadamente extenso de C para comprender lo que ha cambiado desde su publicación.

  • Crea tu propia lista - Daniel Holden (2014). Una forma divertida de aprender C.

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

    Aunque este no es un libro como tal, muchos programadores recomiendan leer e implementar la mayor cantidad posible. MISRA-C fue originalmente pensado como pautas para aplicaciones críticas de seguridad en particular, pero se aplica a cualquier área de aplicación donde se desee un código C estable y 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 se está volviendo cada vez más popular incluso en otras ramas de programación. Hay (al menos) tres publicaciones de la norma (1998, 2004 y la versión actual de 2012). También hay un documento de Pautas de cumplimiento de MISRA de 2016, y MISRA C: 2012 Enmienda 1 - Pautas de seguridad adicionales para MISRA C: 2012 (publicado en abril de 2016).
    Tenga en cuenta que algunas de las restricciones en las reglas de MISRA no son apropiadas para cada contexto. Por ejemplo, la directiva 4.12 establece "No se utilizará la asignación de memoria dinámica". Esto es apropiado en los sistemas integrados para los que están diseñadas las reglas MISRA; No es apropiado en todas partes. (Los compiladores, por ejemplo, generalmente usan la asignación de memoria dinámica para cosas como tablas de símbolos, y prescindir de la asignación de memoria dinámica sería difícil, si no absurdo).

  • Listas archivadas de libros revisados ​​por ACCU sobre 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 puede navegar por tema de todas formas.


Advertencias

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

Tampoco utilice el libro Let Us C (16 ° Edición, 2017) por Yashwant Kanetkar. Muchas personas lo ven como un libro obsoleto que enseña Turbo C y tiene mucho material obsoleto, engañoso e incorrecto. Por ejemplo, la página 137 analiza el resultado esperado de printf("%d %d %d\n", a, ++a, a++)y no lo clasifica como comportamiento indefinido como debería.

Aprenda C The Hard Way (2015) de Zed Shaw. Un libro con críticas mixtas. Una crítica de este libro de Tim Hentenaar:

Para resumir mis puntos de vista, que se exponen a continuación, el autor presenta el material de una manera muy simplificada y engañosa, todo el corpus es un desastre, y algunas de las opiniones y análisis que ofrece son simplemente erróneos. Traté de 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 el autor tiene una comprensión defectuosa de C o está simplificando deliberadamente demasiado Señale dónde está engañando al lector (intencionalmente o no).

"Learn C The Hard Way" no es un libro que podría recomendar a alguien que está aprendiendo a programar y aprendiendo C. Si ya eres un programador competente en algún otro idioma relacionado, entonces representa una exposición interesante e inusual sobre C, aunque tengo reservas sobre partes del libro. Jonathan Leffler


Anticuado


Otros contribuyentes , no necesariamente acreditados en el historial de revisiones, incluyen:
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

Jonathan Leffler
fuente
66
@ PabloBarríaUrenda El contenido inadecuado debe abordarse marcando la publicación. Sin embargo, "dos clics de distancia" es una declaración tonta, por lo que su bandera probablemente sería rechazada. Y cualquier debate sobre si la bandera mencionada es ofensiva o no no debería estar aquí tampoco. Publique tales inquietudes en meta.stackoverflow.com en su lugar.
Lundin
1
¿Qué tiene de tonto "a dos clics de distancia"?
Pablo Barría Urenda
3
Como el año 2019, encontré que <Modern C>valía la pena leer el libro , usaba mucha sintaxis c99 y c11, muy compacto y bien escrito. ¿Y sabes qué? Es gratis !!! Puede descargar la última versión en pdf aquí: icube-icps.unistra.fr/img_auth.php/d/db/ModernC.pdf (BTW, parece que el autor está actualizando y publicando el libro en el enlace anterior según sea necesario)
Eric Wang
1
Estaba a punto de agregar un libro solo para darme cuenta de que fue editado como no recomendado. Tal vez deje a aquellos visibles en la publicación citando las razones por las cuales debe evitarse. ¿Quizás incluso una sección separada de libros NO recomendados?
gst
3
Intenté sin éxito editar la respuesta (aparentemente debido a un formato incorrecto, que aparece incluso antes de hacer una edición). De todos modos, al menos dos libros recomendados se enumeran como "a evitar" aquí: iso-9899.info/wiki/Main_Page#Stuff_that_should_be_avoided . Elimine "Cree su propio Lisp" y "Aprenda C por las malas" y agregue el enlace anterior a la sección Advertencias .
gst