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.cComo 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.