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.'
Makeuseofstack. 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 garbage collection, tan dinámicamente la asignación de elementos de datos es más incómoda y hay que hacer un seguimiento de ellos para make sure they get freed. variables asignados en la pila (ver 1) son más 'idiomática', donde sean 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 estado o código de error y pasan datos dentro y fuera usando la pila según (1).
Conozca qué setjmp()
y longjmp()
do. Pueden ser bastante útiles para los mecanismos genéricos del manejador de errores en lugar de la funcionalidad estructurada de manejo de excepciones.
C does not support exceptions. See (3).
Lint es tu amigo. Splint es aún más amigable.
Conozca lo que hace el preprocessor y lo que no debe hacer con él, incluso si puede.
Conozca los pormenores de endian-ness, word alignment, pointer arithmetic 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 de alcance del módulo, por lo que planifica el uso de incluye, declaraciones de prototipos y uso de extern
y static
para crear ámbitos privados e importar identificadores.
- programación
GUI en C es tedioso en allplatforms.
A propósito de (10) aprender la API C de la lengua al menos un script como Tcl, Lua o Python. En muchos casos el mejor uso de C es como 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 se pasa un puntero al elemento que se desea configurar. A menudo puede ver esto en forma de una llamada a la función que se parece al 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 encuentran Hungarian notation tan legible como está escrito en húngaro. La excepción a esto son los hablantes húngaros nativos, que normalmente encuentran 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.
C/Unix libros, incluso los muy buenos como los escritos por el difunto W Richard Stevens, tienden a estar disponibles de segunda mano bastante baratos a través del mercado de Amazon. En ningún orden en particular, obtener una copia de K&R, Stevens y APUEUNP 1& 2, la Dragon book,Rochkind,Programming Pearls,Petzold y Richter (si está trabajando en Windows) y cualquiera de los otros C clásico/Unix funciona. Lee, garabatea con un lápiz y generalmente interactúa con los libros.
Hay muchos, muchos buenos recursos C/Unix programming en la web.
Lea y comprenda el Ten Commandments of C Programming 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 quite common in the embedded systems world.
Lex and Yacc son tus amigos si quieres escribir analizadores.
Como Navicore points out below (+1), Hanson 'C Interfaces and Implementations' es un diseño de interfaz/implementación desmantelado para 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 el C FAQ.
Aprendizaje C es probablemente una de las mejores cosas que puede hacer para realmente expandir tu conjunto de habilidades. Sé que probablemente eso no es lo que muchos programadores "modernos" están acostumbrados a escuchar en estos días, pero es verdad. Creo que tu deseo de aprender es un movimiento realmente inteligente. –
pregunta increíble, estoy en la misma posición. C es bastante pequeño, pero cuando escribo aplicaciones más grandes, también estoy atascado en cómo diseñarlas ... –