23 de septiembre de 2016

Argumentos en la invocación de programas.

   Muchos programas y comandos en línea reciben y procesan argumentos que modifican o alteran su funcionamiento. El compilador GNU de C (gcc) por ejemplo, cuando se ejecuta en la línea de comandos, recibe argumentos como el nombre del programa a compilar, un nombre de archivo si se va a generar un archivo de salida ejecutable específico, etc.

   La función principal de cada programa escrito en C (main) es capaz de recibir argumentos que pueden ser manipulados y procesados. El Ejemplo 7.9 muestra un sencillo programa de prueba de estas capacidades.

   Observe primero la línea 7, la cual presenta una la lista de dos argumentos para main:
  1. argc (argument counter) es el número de argumentos proporcionados en la invocación del programa, incluyendo el nombre del programa.
  2. argv (arguments vector) es un arreglo de apuntadores a char de longitud argc. Cada elemento del arreglo, hará referencia a una cadena correspondiente al argumento en cuestión.
   El ciclo for de la línea 10 se repite argc veces e imprime en la salida estándar (línea 11) los argc argumentos recibidos y referidos por cada uno de los apuntadores de argv.

   Suponga que el nombre del archivo del Ejemplo 7.9 es mainArgs.c y que se compila de la siguiente manera:

$gcc -Wall -o cambiaBase mainArgs.c

   El ejecutable de mainArgs.c se genera entonces en el archivo cambiaBase, por lo que si ahora se ejecuta el programa de la forma siguiente:

$./cambiaBase 101011101 2 9

   Se obtendrá la salida de la siguiente figura (a) y su correspondiente representación mostrada en (b).

(a) Una posible salida del Ejemplo 7.9.
(b) Representación de argv para la ejecución mostrada en la figura (a).
   Observe que el valor de argc es de cuatro, y que cada argumento es referido por los cuatro apuntadores correspondientes de argv para el caso específico de la ejecución mostrada en la figura anterior (a).

   Finalmente, note también que el primer argumento es el nombre del programa. Esta característica resulta sumamente conveniente y dota de mucha versatilidad a los programas.