Me convertí en un programador profesional en la era del código orientado a objetos, y tengo años de experiencia en programación en C++. A menudo trabajo en proyectos grandes que tienen años de código heredado en una combinación de C++ y c. Me siento menos cómodo trabajando en partes puras de sistemas. Desde la programación en C++ entiendo toda la sintaxis c, pero hay un vacío en mi conocimiento sobre cómo organizar un programa c complejo sin objetos, y lo que constituye la mejor práctica para administrar la memoria que me gustaría llenar. Aprendí C++ después de trabajar como programador de Java, y creo que un poco más c me haría un mejor programador de C++, y un poco menos de Java traducido a programador de C++¿hay algún tutorial para ayudar a un programador experto en C++ a aprender c?
Respuesta
En términos de organización, mirando el POSIX APIs, especialmente pthreads le dará una buena idea de cómo organizar el código C. Las reglas básicas de la buena organización del proyecto C son:
- No exponga sus estructuras. Use solo tipos opacos.
- Utilice la biblioteca y los nombres de tipos de datos como prefijos para los nombres de las funciones.
- Proporcionan funciones de "crear" y "destruir" para asignación/construcción y destrucción/desasignación.
- Pase el tipo opaco como el primer parámetro para las funciones que operan en ese tipo.
- Implemente las C API utilizando C o C++ (depende de usted). Obviamente, usa tipos no opacos allí.
Buscando en la construcción de programas con un uso extensivo de punteros también como estructura de bajo nivel sería un buen comienzo en mi opinión de todos modos. También depende de para qué está diseñado el programa. ¿Estás tratando de escribir el código C en una placa rtos incorporada o en un sistema de microcontrolador?
a veces trabajo en sistemas heredados que tienen mucha c, por lo que esa es la razón inicial. También sospecho que me haría un mejor programador de C++ para estar más familiarizado con el diseño de programas que se basan en datos en estructuras y otras técnicas de c, en lugar de asumir que todo tiene que ser un objeto. –
En ese caso, le sugiero que mejore el conocimiento de su puntero, ya que Java no le permite tratar con punteros. Además, si desea aprender sobre la optimización de hardware, sería genial si puede obtener una computadora de placa única, microcontroladores o teléfono inteligente/PDA integrados para aprender a escribir C/C++ optimizado para hardware. – stanigator
Estaba básicamente en el mismo barco que tú (aunque con menos experiencia, y comencé con Python en lugar de Java), y lo que funcionó mejor para mí fue sentarme y leer Kernighan y Ritchie. Podrá leer la primera mitad del libro porque se siente cómodo con la sintaxis, pero definitivamente se irá con una mejor comprensión de la gestión de la memoria de bajo nivel.
Leer las partes de la fuente del kernel de Linux que tienen que ver con la administración de la memoria también ayuda, pero no es para los débiles o aburridos.
Ampliando another answer, una forma es simplemente escribir C. Esta es la forma más bibliotecas que interactúan con comportan (por ejemplo la pila GNOME es casi totalmente orientada a objetos C, en su mayoría sobre la base de la gobject orientado a objetos biblioteca para hacerlo más fácil). Puedes pensar que es C++ sin algo del azúcar sintáctico.
Se termina con una API como
/* in project NewStuff; namespace is ns */
ns_foo_t *ns_foo_new();
void ns_foo_delete (ns_foo_t *);
int ns_foo_make_waffles (ns_foo_t *this, int no_of_guests);
int main() {
ns_foo_t *my_foo = ns_foo_new();
ns_foo_make_waffles (my_foo, 1);
ns_foo_delete (my_foo);
}
que corresponde casi exactamente a
class Foo {
public:
Foo() { /* whatever */ }
int make_waffles (int no_of_guests) {}
};
int main() {
Foo *my_foo = new Foo();
my_foo->make_waffles (1);
delete my_foo;
}
También podría retirar The C Programming Language ANSI C Edition escrito por Kernighan y Ritchie.Sí, es antiguo, pero solo alcanza las aproximadamente 200 páginas y cubre todo el idioma, así como la biblioteca estándar.
- 1. Tutorial en C++ para el programador con experiencia C
- 2. C para un programador orientado a objetos
- 3. Debería aprender Openedge como programador de C#
- 4. ¿Dónde puedo encontrar un tutorial para comenzar a aprender jQuery?
- 5. ¿Hay algún beneficio en aprender LISP?
- 6. ¿Hay algún programa que pueda ayudar a entender otro programa?
- 7. ¿Hay algún tutorial sobre programación C++ en Visual Studio 2008?
- 8. Aprendiendo OO para un programador en C
- 9. Recursos para el programador de C++ para aprender JS
- 10. Sugerencias de ejercicios para ayudar a aprender el enhebrado múltiple en C#
- 11. buen tutorial para aprender C++ Development para Game Boy
- 12. Punteros a algún buen Tutorial de SVM
- 13. C++ para el programador Objective-C
- 14. Explicar C++ SFINAE a un programador que no es C++
- 15. ¿Cuál es el mejor tutorial para aprender MPI para C++?
- 16. ¿Hay algún programa para convertir el ensamblaje a C++?
- 17. ¿Hay algún libtorrent para C#?
- 18. ¿Hay algún Tutorial para Protobuf-net?
- 19. Tutorial de RAII para C++
- 20. ¿Hay algún buen video tutorial para Hibernate?
- 21. ¿Hay algún tutorial/guía para usar Firebug?
- 22. Intel Core para un programador C
- 23. ¿Hay algún tutorial para los programadores de Ruby que quieran aprender Perl?
- 24. ¿Hay algún tutorial sobre giza ++?
- 25. ¿Un juego educativo para aprender a programar?
- 26. ¿Debo aprender a implementar OOP en C? ¿Hay proyectos que usan OOP en C?
- 27. ¿Sería Lisp extremadamente difícil para un programador nuevo (ish) aprender?
- 28. ¿Hay algún tutorial de animación de Android útil para principiantes?
- 29. experto para conectarse a un proyecto local
- 30. Fuentes para aprender Java como programador
alguna vez el tutorial que he encontrado parece suponer que usted es un programador de c que se traslada a C++. Seguramente no puedo ser el único programador orientado a objetos que quiera entender mejor c. –
Creo que si escribes un par de programas de C de tamaño mediano que te enseñarán a mantenerte alejado de problemas. En realidad, meterse en problemas (en cualquier idioma) es una forma valiosa de aprender. Como tocar algo caliente. – Nosredna
Hay varias preguntas en este sentido en StackOverflow ya (y algunos C# pasando a c preguntas). Desde mi hablante c nativo, más funcional en C + +, creo que vi varias cosas que parecían buenas. Podrían valer la pena cazar. – dmckee