programación - programacion c++ para principiantes
Recursos para aprender el diseño del programa C (7)
Aplicaciones más grandes? La fortaleza de C es cuando tienes que lidiar con cosas de bajo nivel como controladores de dispositivos, programadores y otras cosas con el sistema operativo.
Puedes hacer que C funcione como OO, pero eso sentirá como un ejercicio para reinventar la rueda.
Procedente de un fondo OO (C # / java) Estoy buscando recursos para aprender a diseñar programas C puros.
Aunque estoy familiarizado con la sintaxis de C, y puedo escribir pequeños programas, no estoy seguro del enfoque que se debe seguir para las aplicaciones más grandes, y qué técnicas emplear. Cualquier cosa que ustedes puedan recomendar.
EDITAR: Me complace abandonar por completo OO para programar en C, mi interés es aprender a estructurar un programa sin OO, quiero aprender sobre las buenas formas de diseñar programas en lenguajes de procedimiento como C.
Aquí hay algunas respuestas interesantes de una pregunta diferente con respecto a la programación de OO en C. Hice una publicación sobre un código de C con el que trabajé, cuya orientación de objeto básicamente impulsiva se detuvo muy poco al no incluir los métodos virtuales.
Si estuviera haciendo la codificación C, usaría esta técnica para definir ''objetos''.
Considero que mantener los patrones de diseño en mente siempre es útil, y se puede implementar en la mayoría de los idiomas.
Aquí hay un buen PDF que analiza la programación en C orientada a objetos .
Mis preocupaciones desde OO hasta C fueron abordadas en las "Interfaces e implementaciones C" de David Hanson.
C Interfaces e implementaciones
En serio, su enfoque hizo una gran diferencia al evitar construir accidentalmente la gran bola de hilo que muchos sistemas que no son originales terminan así.
Si bien está escrito como un texto un tanto independiente del lenguaje, Code Complete proporciona una gran cantidad de orientación sobre la estructura del código y la organización, junto con las prácticas de construcción.
Una cosa menor es ordenar sus archivos .c "al revés" - es decir, poner main () en la parte inferior del archivo, y siempre asegúrese de que las funciones locales (que no están en su archivo .h, que acaba de escribir para su uso en ese archivo) viven arriba donde se usan por primera vez. Esto significa que no tiene que escribir prototipos para ellos, que es una cosa menos para jugar si tiene que cambiar su API.
Luego, como una ventaja, el comando ''gD'' en vim siempre irá a la definición de una función, si está en el mismo archivo :)
minix por tanenbaum
Esta publicación tiene una lista de libros de Unix que incluye la mayoría de los trabajos clásicos de C / Unix. Para la programación C en Windows, el Windows Programming de Petzold es probablemente el mejor comienzo.
Para el diseño del programa C, algunos de los libros de programación de Unix le dirán fragmentos, pero no conozco un libro de ''arquitectura de programa C.''
Si está acostumbrado a Java, algunos consejos para la programación en C son:
Make use of stack . A menudo, cuando llama a un procedimiento, querrá tener variables asignadas en el marco de pila de la persona que llama y pasarles punteros al procedimiento que desea llamar. Esto será sustancialmente más rápido que la asignación dinámica de memoria con
malloc()
y mucho menos propenso a errores. Haz esto donde sea apropiado.C no hace la recolección de elementos no utilizados, por lo que la asignación dinámica de elementos de datos es más complicada y hay que hacer un seguimiento de ellos para asegurarse de que se liberen. Las variables asignadas en la pila (ver 1) son más ''idiomáticas'' donde son aplicables. Además, no tiene que liberarlos, esto es una bonificación para las variables locales.
A propósito de (2), considere una arquitectura donde sus funciones devuelven un código de estado o error y pasan datos dentro y fuera usando la pila según (1).
Conozca lo que hacen
setjmp()
y setjmp() . Pueden ser bastante útiles para los mecanismos genéricos del manejador de errores en lugar de la funcionalidad estructurada de manejo de excepciones.C no admite excepciones. Ver (3).
Aprenda lo que hace el preprocessor y lo que no debe hacer con él, incluso si puede.
Conozca los pormenores del endian-ness , la alineación de palabras , la aritmética de punteros y otros arcanos arquitectónicos de bajo nivel. Contrariamente a la opinión popular, estos no son ciencia espacial. Si te sientes con ganas, intenta incursionar en el lenguaje ensamblador y obtener un conocimiento práctico de eso. Hará mucho por su comprensión de lo que está sucediendo en su programa C.
C no tiene ningún concepto del alcance del módulo, por lo tanto, planifique su uso de inclusiones, declaraciones de prototipos y uso de
extern
ystatic
para crear ámbitos privados e identificar identificadores.La programación de GUI en C es tediosa en all platforms.
A propósito de (10) aprender la API C de al menos un lenguaje de scripting como Tcl , Lua o Python. En muchos casos, el mejor uso de C es como un motor central de alto rendimiento en una aplicación que está sustancialmente escrita en otra cosa.
El equivalente de un constructor es una función de inicialización donde pasa un puntero al elemento que desea configurar. A menudo puede ver esto en forma de una llamada a la función que se parece a
setup_foo(&my_foo)
. Es mejor separar la asignación de la inicialización, ya que puede usar esta función para inicializar un elemento que haya asignado en la pila. Un principio similar se aplica a los destructores.La mayoría de las personas consideran que la notación húngara es tan legible como el húngaro escrito. La excepción a esto son los hablantes húngaros nativos, que suelen encontrar la notación húngara tan legible como Cuneiform. . Desafortunadamente, la notación húngara se encuentra ampliamente en el software de Windows y todo el API de Win32 lo usa, con los efectos esperados sobre la legibilidad del software escrito en esta plataforma.
Los libros de C / Unix, incluso los muy buenos, como los escritos por el difunto W Richard Stevens, suelen estar disponibles de segunda mano de forma bastante económica en el mercado de Amazon. Sin ningún orden en particular, obtenga una copia de K&R, Stevens APUE y UNP 1 & 2, el libro Dragon, Rochkind, Programming Pearls, Petzold y Richter (si trabaja en Windows) y cualquiera de los otros trabajos clásicos de C / Unix. Lee, garabatea con un lápiz y generalmente interactúa con los libros.
Hay muchos, muchos buenos recursos de programación C / Unix en la web.
Lea y comprenda los Diez Mandamientos de la Programación C y algunas de las metadiscusiones sobre los por qué y los detrás de los mandamientos. Esto muestra su edad hasta cierto punto, aunque la mayor parte sigue siendo relevante y los compiladores oscuros todavía son bastante comunes en el mundo de los sistemas integrados .
Lex y Yacc son tus amigos si quieres escribir analizadores.
Como señala Navicore a continuación (+1) , ''C Interfaces and Implementations'' de Hanson es un diseño de interfaz / implementación para la arquitectura modular con un montón de ejemplos. De hecho, he oído hablar de este libro y he escuchado cosas buenas sobre él, aunque no puedo decir que lo haya leído. Además de los modismos en C que describí anteriormente, este concepto es posiblemente el núcleo del buen diseño de procedimientos. De hecho, otros lenguajes de procedimiento como Modula-2 realmente hacen que este concepto sea explícito en su diseño. Esto podría ser lo más parecido a un libro ''C Program Architecture'' impreso.
Lea las C preguntas frecuentes .