2009-04-22 17 views
15

me gustaría estudiar algunos/C código de buena C++. El código debe:Sugerencias de excelentes ejemplos de código C Real/C++

  1. ser bueno en el estilo y la estructura, la presentación de las mejores prácticas
  2. ser un programa de la vida real (no es un ejemplo o un juguete)
  3. no demasiado grande, así que no lleva mucho tiempo, para analizar que
  4. Windows y/o Unix

sé que hay 1000 de los proyectos de código abierto que hay. Pero me gustaría escuchar tus sugerencias.

Soy programador de Java y estoy curioso como buen proyecto en C/C++ está estructurada (archivos), granularidad de clases/funciones/archivos, documentación/comentarios, herramientas de construcción, etc.

sugerencias Múltiples son recibidos por ejemplo, este es un buen ejemplo de Windows, que es un buen C puro, etc.

+4

Esto debería ser Wiki de la Comunidad. –

Respuesta

8

Mencionaría específicamente memcached. Es un gran ejemplo de código bastante corto y legible con un propósito claro.

En segundo lugar, yo recomendaría el Apache web server. Es un proyecto de código abierto fantásticamente bien administrado del que aprenderá mucho, tanto sobre el lenguaje, como sobre las prácticas generales de diseño y las redes/enhebrado.

2

Aquí está el main file para relayd, que es un daemon que maneja el equilibrio de carga y la conmutación por error. Está muy bien escrito, con todas las funciones, código C limpio. Es lo suficientemente grande como para tener una idea de un programa del "mundo real", pero no tanto como para no poder entenderlo con algo de trabajo. Ideal para código de red seguro, bien escrito, daemons, etc.

Modestia aparte, también hay un pequeño tiling window manager para X con el que he colaborado. Es bastante pequeño pero es una verdadera WM, y los otros codificadores tienen altos estándares (¡y me abrazas a ellos!) ... Agradable para aprender cosas básicas de X.

4

Samba: un grande, multiplataforma (POSIX-based), C puro, muy popular servidor de red.

Samba tiene buena developer documentation, y el propio código base es muy bien organizados; No he tenido problemas para acceder a casi cualquier ubicación dentro del código para responder una pregunta que tenía sobre su funcionamiento interno o para rastrear un error.

3

puedo encontrar la aplicación de Lua es bastante agradable fuente C. Pero los idiomas son un poco extraños como un proyecto de ejemplo.

+0

Muchos kits de fuentes históricas (incluida la versión actual 5.1.4) se encuentran en http://www.lua.org/ftp/ y hay una interfaz web para el kit de recursos actual en http://www.lua.org/source /5.1/ – RBerteig

3

Diomidis Spinellis tiene algunas sugerencias en su libro, "Código de lectura: La Fuente Open Perspective", Addison Wesley, 2003. ISBN 0-201-79940-5.

Quizás el libro podría ser útil para usted.

URL http://www.spinellis.gr/codereading/

3

Google's Chromium es bastante grande, pero usted no tiene que analizar todo para apreciar su estructura limpia, revisada por expertos. Además, es un buen ejemplo de implementación del entorno de desarrollador muy bien hecho.

+0

gracias por la sugerencia! Solo puedo marcar una respuesta como "aceptada", sin embargo, su sugerencia es el tercer proyecto que voy a analizar. – k1udge

-1

Es imprescindible disponer de elegir entre C o C++. El ejemplo obvio: las buenas prácticas para la gestión de errores difieren mucho.

+0

Bajé la votación porque esto debería ser un comentario. – nbro

1

K&R tiene muchos buenos ejemplos de programas reales. Por ejemplo, en la página 115 de la Segunda Edición hay dos implementaciones simples del comando echo. A partir de ahí, podría ser interesante ver cómo se implementó el comando a lo largo del tiempo. Por ejemplo, hay una versión en la fuente GNU coreutils. Una versión derivada de BSD se puede encontrar en la fuente BusyBox.

Puede ser interesante ver cómo las versiones más nuevas se comparan con los ejemplos del libro de texto. ¿Por qué los programas que se usan en la vida real son más largos? ¿Qué parte del código se relaciona con las nuevas funciones y cuánto se relaciona con el tratamiento de casos límite? ¿Cómo escribirías el mismo código en Java?

Cuestiones relacionadas