La función print_line
imprime una línea con el
símbolo “-” repetido tantas veces como indica su único
parámetro. Ese valor se le pasa a través de la variable
line_width
declarada y asignada en la primera línea de la
función main
. Si el programa tuviese que ejecutarse en
dispositivos con ancho de pantalla de 20, 40 y 60 caracteres, ¿cómo
obtendrías estas tres versiones? Es decir, hay que obtener tres ejecutables
del mismo programa, pero que impriman líneas de diferente longitud.
El compilador dispone de una funcionalidad que es muy útil
en estos casos. Edita el programa, borra la primera línea de la
función main
donde se define y asigna el valor a
line_width
. Modifica las dos líneas que llaman a la función
print_line
tal que sea:
print_line(LINEWIDTH);
El programa es aparentemente incorrecto, pues hay un
símbolo, concretamente LINEWIDTH
que se utiliza pero que no se
declara en ningún sitio. Compila ahora el programa pero utilizando la opción
-D seguida de la definición
LINEWIDTH=80 tal y como se muestra en el siguiente
comando:
$ gcc -DLINEWIDTH=80 -o main_es main_es.c
Como puedes comprobar, el compilador no informa de ningún
error y el ejecutable se crea normalmente. La opción -D
seguida del nombre de un símbolo y de (opcionalmente) un signo igual y un
valor hace que el compilador pre-procese el código fuente y toda aparición
del símbolo la reemplace por el valor dado. Ojo, que lo que hace el
compilador es un reemplazo textual, en otras palabras,
el programa no tiene ningún símbolo con nombre LINEWIDTH
sino
que en el programa hay dos líneas que en la compilación anterior se han
procesado como
print_line(80)
Prueba a re-compilar con diferentes valores del símbolo
LINEWIDTH
y comprueba que se imprimen diferentes longitudes de
línea. ¿Qué sucede si omites en el comando de compilación el signo igual y
el valor? Para distinguir en el código los símbolos del programa de aquellos
que se procesan con este reemplazo textual, se utiliza la convención (que no
obligación) de escribirlos todos en letras mayúsculas.