Bienvenidos sean a este post, hoy veremos un tema muy interesante.
Hasta ahora vinimos trabajando con una funcion main muy basica que simplemente tiene las instrucciones que necesitamos para ejecutar nuestro codigo pero posee dos variables que podemos usar para recibir valores como argumentos:
- argc, es de tipo int y se usa para contar los argumentos que pasemos
- argv, es de tipo char y sera la receptora de los argumentos que pasemos
En realidad los nombres de las variables son opcionales y se puede usar cualquier nombre a nuestra conveniencia aunque los nombres indicados se asignaron por convencion para una mejor estandarizacion de los codigos, les dejo un ejemplo de como se puede definir:
int main(int argc, char* argv[])
{
... instrucciones ...
}
Ahora se estaran preguntando como pasamos estos argumentos, bueno estos los pasamos en la linea de comandos al momento de ejecutar nuestro programa, de manera preterminada el valor de argc siempre sera de 1 porque el primer argumento que cuenta nuestro codigo es el nombre de nuestro programa, para entenderlo mejor vamos a crear un nuevo archivo con el nombre ejemplo33.c y le agregaremos el siguiente codigo:
ejemplo33.c
#include <stdio.h>
int main(int argc, char* argv[])
{
printf("argc = %d\n", argc);
printf("argv[0] = %s\n", argv[0]);
return 0;
}
En este codigo bien simple agregamos la declaracion de nuestras dos variables para recibir argumentos, y dentro del main primero mostraremos el valor de argc y luego de la primera posicion de argv, compilemos y veamos como es su salida:
tinchicus@dbn001vrt:~/lenguajes/C$ ./prog/ejemplo33
argc = 1
argv[0] = ./prog/ejemplo33
tinchicus@dbn001vrt:~/lenguajes/C$
Como les dije siempre tendremos el valor de 1 para argc de manera predeterminada porque en argv la primera posicion esta asignada al nombre de ejecucion del programa, si lo hacen desde el mismo directorio del programa aparecera solamente el nombre del programa sino todo el path de ejecucion, como pueden ver esto es muy simple asi que pasaremos a modificar el codigo de la siguiente manera:
#include <stdio.h>
int main(int argc, char* argv[])
{
if (argc == 1)
{
printf("No se pasaron argumentos\n\n");
printf("Utiliza %s <arg 1> <arg 2> ... <arg N>\n",
argv[0]);
} else {
printf("Argumentos pasados: %d\n", argc);
for(int i=0; i < argc; i++)
{
if (i==0)
{
printf("Ejecutable: %s\n", argv[i]);
} else {
printf("Argumento %d: %s\n", i, argv[i]);
}
}
}
return 0;
}
Lo primero que haremos sera tener un condicional donde verificamos si argc es igual a 1, en caso de ser verdadero mostraremos un mensaje indicando que no pasamos ningun argumento y luego otro indicando como se debe utilizar, donde indicamos el programa y los argumentos que deseemos, despues tenemos un else, el cual sera para argc sea mayor que 1, en este caso primero indicaremos la cantidad de argumentos pasados, recuerden que el total de argc incluye al programa en si, despues por medio de un bucle iremos pasando por los distitnos argumentos y los mostraremos pero con una salvedad, en este caso chequearemos cuando i sea igual a 0 para indicar quer sera el ejecutable y despues el resto de los argumentos, con todo esto comentado veamos como es su salida mediante el siguiente video:
Observen como el programa pudo manejar todas las opciones que podemos tener en nuestro codigo, desde ejecutarlo sin argumento hasta distintas formas de usarlo, ya sea con letras, con numeros y con comillas dobles y simples, siendo estos ultimos dos casos los mas curiosos porque todo lo que pasemos como entre ellas lo tomara como un solo argumento, permitiendo procesarlo como cadenas de texto.
En resumen, hoy hemos visto a los argumentos del main, estos nos permiten recibir informacion desde la linea de comandos y poder procesarlos en el main, vimos como son los tipos de datos que recibe y como los maneja, hemos visto que el nombre no es obligatorio pero por convencion se utilizan asi, despues hemos visto un codigo simple para ver los valores predeterminados y otro con la capacidad de recibir y procesar dicha informacion, espero les haya sido de utilidad sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.


Donación
Es para mantenimento del sitio, gracias!
$1.50
