¿Cómo aprendo a escribir código C eficiente y mantenible?

Mi experiencia actual con la progtwigción se limita a hackear algunos shell scripts y algunos ensamblados en el pasado. Sin embargo, aprendí la syntax básica del código C en la universidad.

Quiero aprender a escribir código C eficiente, confuso si comenzar con K&R o Progtwigción C: un enfoque moderno. Además, ¿debería estudiar algunos libros de algoritmos para no terminar de escribir código ineficiente desde el principio?

No te preocupes demasiado por el código eficiente en esta etapa. Preocúpate más por el código claro y legible.

Como regla general, mantenga las funciones pequeñas, realizando una tarea. Si se requieren demasiadas oraciones para describir lo que hace una función, es probable que sea necesario dividirlas en funciones más pequeñas.

Use nombres de variables descriptivos, en lugar de solo x y n, etc.

Comience escribiendo progtwigs que disfrutará desarrollando, en lugar de “ejercicios aburridos que el libro le dice que haga”. Sin embargo, siga los consejos y pautas del libro.

Todos tienen su propio estilo, no te preocupes si tu estilo no coincide con el de la siguiente persona.

Por encima de todo, disfrutalo! Si encuentra que aprender algo es un poco aburrido, pase a otra cosa, siempre hay mucho que aprender.

EDITAR: Además, no intente ejecutar antes de que pueda caminar: estoy pensando específicamente en a) punteros yb) asignación de memoria dinámica. No hay necesidad de usar ninguno de ellos en esta etapa temprana hasta que estés cómodo.

Primero mojarse con lo básico. Aprende las trampas, aprende un buen estilo C No se puede aprender a escribir código C eficiente en una ejecución, por lo que está bien cometer errores al principio.

Descubrí que la mejor manera de aprender a escribir código eficiente es aprender a evitar pérdidas de memoria. El código C mantenible requiere buena documentación y comentarios en la fuente. Además, requiere escribir código que resista el cambio.

Ejemplos:

mal ejemplo:

 int* ptr = malloc(5 * 4); //4 here being size of int. ... do something with ptr here... //<-- this is wrong! 

Por que mal int puede que no siempre sea 4. Además, en la segunda línea estás haciendo algo con ptr (probablemente asignación) sin verificar si era NULL.

mejor ejemplo:

 int* ptr = malloc(5*sizeof(int)); // better, always allocate with respect to int size if (ptr) ..do something.. 

Por que mejor Primero asignó con respecto al tamaño de int, por lo que incluso si en otra architecture el tamaño de int fuera diferente, es bueno. También verifica si ptr es NULL antes de usar

Mejor ejemplo:

 int* ptr = malloc(5* sizeof(*ptr)); if (ptr) .. do something. free(ptr); // done with ptr 

¿Por qué es esta la mejor manera? Primero se vinculó el tamaño de la asignación no con el tamaño de int, sino directamente con el tipo de ptr. Ahora, si alguien, por alguna razón, cambió int por mucho tiempo en la statement de ptr (especialmente si fue declarada en otro lugar) sin cambiar por mucho tiempo dentro del argumento de malloc; su asignación seguirá siendo correcta porque se asigna directamente de acuerdo con el tipo que sea ptr.

También liberamos ptr después de terminar con esto, para evitar una pérdida de memoria.

Debería intentar leer “Escribir código sólido” de Steve Maguire, es un libro antiguo, pero puede enseñarle lo que necesita.

En primer lugar, el cuidado de la progtwigción portátil . Existe un Estándar C (ISO 9899: 1999, también conocido como C99 y: 2011, también conocido como C11, es necesario invertir ~ 20 dólares) y un Estándar “Unix”, denominado POSIX (de acceso gratuito). Léelos, vívelos. Manténgase alejado de todas y cada una de las progtwigciones de Windows y gráficos hasta que ya no sea un saltamontes.

Como dice el sabio: El novato progtwig su máquina. El experto progtwig un conjunto de máquinas. Los progtwigs del guru para ninguna máquina en particular.

Esa es la esencia de la portabilidad y le ahorrará muchas preguntas de la forma Comstackda / ejecutada bajo FOO-OS con el comstackdor mágico Frobozz, pero no bajo BAR-OS, WTF?

Para ser honesto, en mi opinión, empiezas a aprender c ++, que es una versión avanzada del lenguaje c. Tener un código mejor y más eficiente aquí es un enlace que te daría un comienzo .. Enlace http://internetseekho.com/learn-the-write- forma de codificar en c parte 4 obtener datos de usuario y mostrarlos en pantalla

Puedes emular la progtwigción orientada a objetos.

Defina entidades definiendo archivos que contienen estructuras y funciones que operan en estas estructuras. Marque las funciones que no necesitan verse fuera como estáticas. Esto los mantendrá ocultos, por lo que contamina menos el espacio de nombres. Cree una nueva estructura con una new función que devuelva un puntero a la nueva estructura malloc() , y una eliminación que realice el free() . Defina miembros simples que operan en los datos de estructura, aceptando un puntero a la estructura siempre como un primer argumento.

Le sugiero que aprenda algunos OOP con python y aplique los mismos conceptos.

Para agregar a lo que otros han dicho, recomendaría simplemente escribir un montón de código. A menudo encuentro que las personas en este campo esperan demasiado tiempo para codificar, y pasan demasiado tiempo leyendo.