Archivo del sitio

Hablando de C: Programa que borra comentarios del código

Estoy probando Windows 10 y quería compilar un programa en C. En un sistema Unix o GNU/Linux, bastaría con recurrir a gcc desde la línea de comandos. Para Windows, podemos utilizar las herramientas de MinGW “Minimalist GNU for Windows”, lo podemos descargar de la página oficial del proyecto: http://www.mingw.org/

Al finalizar de instalar hay que recordar agregar al PATH de las variables de entorno la ubicación de los binarios de MinGW.

Para las variables de entorno, en Windows 10 podemos apretar CTRL+X e ir al menú System, de ahi seleccionar Advanced System Settings:

pathenv

Finalmente agregamos/verificamos la ruta hacia la carpeta bin de MinGW:

pathenv2Una vez instalado reiniciamos y ya está listo para usarse desde la línea de comandos funcionando de la misma manera que si estuvieramos trabajando desde una terminal tipo Unix o GNU/Linux, por decir para compilar un archivo de C:

> gcc nombre_archivo.c -o nombre_programa

consola

Cuando estamos aprendiendo un nuevo lenguaje de programación, los aspectos técnicos antes de empezar son algo enfadosos, pero creo que C es muy agradable en ese aspecto, más si tenemos un sistema tipo Unix, puesto que por lo general ya incluyen compiladores para C (como gcc).

¿Qué otras ventajas tiene C?, bueno, en teoría si programas en ANSI C (el estándar), tu programa debe correr bien en cualquier implantación que respete el estándar, o en otras palabras, es portable.

Estaba leyendo el libro de “El Lenguaje de Programación C” de K&R y me detuve a revisar el problema 1-23, el cual dice:

Escriba un programa para eliminar todos los comentarios de un programa en C. No olvide manejar apropiadamente las cadenas entre comillas y las constantes de carácter. Los comentarios de C no se anidan.

Bueno, creo que los que han leído el libro notaron que desde el capítulo 1 hay problemas muy interesantes, comparto el código que hice para la respuesta a este problema, a lo mejor a alguien le puede resultar útil o incluso sería agradable ver alguna respuesta alternativa.

El código lo pueden descargar del siguiente enlace: http : //www. mediafire .com/view/vxibrpd1w2zb8dk/clean_comments.c (dejo el código con fin de referencia nadamas)

Código corregido:

Nuevo enlace: http://www.mediafire.com/view/hzn69fgxp9mlz0z/clean_commentsv2.c

Tuve que modificar un poco el código para que cumpliera el propósito, considerando:

  • Saltar cadenas de caracteres
  • No imprimir in-line comments (del tipo que empiezan con //)
  • Considerar comentario las lineas de texto que empiezan con /* y terminan con */

En el capítulo 1 del libro, hablan de la función getchar(), la cual lee el siguiente caracter que recibe de la Entrada Estándar. Así por decir, podríamos desde la consola redireccionar que la Entrada la lea de un archivo y mande la Salida a otro archivo, los pasos los podemos ver en la imágen, desde la compilación hasta la ejecución de este programa teniendo como entrada el mismo programa fuente y generando un archivo test.c con el código sin comentarios:

consola2

Finalmente, comparando los dos archivos, parece que el programa cumple el cometido:

comparativa

En programación hay más de una manera de resolver el mismo problema, por lo general se busca la solución más eficiente. A veces la eficiencia se mide en líneas de código, pero más importante aún, medirlo en el tiempo de procesamiento o los pasos (notación de la Big O) que le toma a mi programa ejecutar su tarea en el mejor y en el peor de los casos.

De C, podemos hablar mucho … en el capítulo uno se tocan los temas de variables, funciones y arreglos, cuando vas en capítulos más avanzados te invitan a regresar y resolver los problemas pero ahora con apuntadores.

Uno puede tratar un arreglo como si fuera un apuntador, cuando un arreglo se pasa como argumento a una función, lo que estamos pasando en realidad es la posición en memoria del primer elemento del arreglo, dicho de otra forma, un apuntador, por lo que la función puede modificar por referencia el valor del arreglo.

Espero el post anime a más gente a voltear a la programación en C, el lenguaje para programar Sistemas Operativos y del cual la mayoría de lenguajes modernos han heredado muchos conceptos (la sintaxis en Python, PHP, Java y Javascript a mi gusto es muy parecida).

EOF