domingo, 19 de septiembre de 2010

Argumentos de Main

Por costumbre, a mi no me gusta llamar a los programas con argumentos, pero he de reconocer que es bastante útil, y mas que necesario, así que voy a explicar como llamar a nuestros programas con argumentos.


La sintaxis de main con argumentos suele ser la siguiente:

int main(int argc, char* argv[])


Lo que equivale a:

int main(int argc, char** argv)


Las 2 formas son válidas.

El 1º argumento, argc, es un contador. Cuenta el número de parámetros que pasamos a main. Ahora es probable que no se vea su utilidad, pro mas adelante la explicaré con ejemplos.

argv Es un array de cadenas. Se almacenarán todas las que le pasemos como parámetro al programa.

Ahora vamos a ver un primer ejemplo de paso de parámetros.

//Requiere stdio.h
int main(int argc, char** argv)
{
printf("%s", argv[1]);
}

Ejecutando esto desde el terminal, sin pasar parámetros, obtendremos lo siguiente:

serch@serch-server:~/Escritorio$ ./1
(null) serch@serch-server:~/Escritorio$


Nos devuelve null pues no hemos llamado al programa (En mi caso he llamado 1 al programa) con argumentos. Vamos a probar ahora a pasarle 1 argumento:

serch@serch-server:~/Escritorio$ ./1 Hola
Hola serch@serch-server:~/Escritorio$


Como vemos, imprime el argumento que le hemos pasado. Por defecto, el primero argumento en la cadena (argv[0]) es el nombre del programa, por eso las cadenas que pasamos por parámetro se almacenan desde argv[1] hasta argv[n].

Ahora vamos a darle utilidad a argc, vamos a usarlo como variable contador para imprimir todos los argumentos que le pasemos a un programa:

//Requiere stdio.h
int main(int argc, char** argv)
{
int cont;
for (cont=0;cont<argc;cont++)
{
printf("%s \n", argv[cont]);
}
}


Ahora podemos llamar al programa con todos los argumentos que queramos. argc se encargará de contarlos. En el bucle se va a ejecutar hasta que cont sea menor que argc, por lo cual recorreremos e imprimiremos todos los argumentos. Si no queremos que nos muestre argv[0], podemos inicializar cont a 1, así se saltará el 1º elemento.


6 comentarios:

  1. Esto para mi es practico, en mi opinion, cuando creas un programa grande es una de las mejores formas de pasarle las opciones.

    ResponderEliminar
  2. No es una de las mejores, es la mejor forma.

    La cosa, es que yo suelo hacer muchos programas pequeños, en vez de uno grande xD

    ResponderEliminar
  3. Que IDE utilizas en Linux ? Yo para C uso CodeBloks (en Linux)

    ResponderEliminar
  4. Pues depende. Para cosas pequeñas, uso directamente gedit (o nano si estoy en centos) mas GCC.

    Si necesito navegar entre varios archivos y eso, Geany

    Y si voy a hacer proyectos grandes, la versión de C/C++ de NetBeans

    ResponderEliminar
  5. Hola, tengo una duda; si ya paso parametros al main y funciona desde la linea de comandoos, como hago para q corra al compilarlo en el IDE?, es necesario hacer una nueva funcion q haga lo q ya hace el main para llamar esta desde el main con parametros establecidos??

    ResponderEliminar
  6. Me cuesta entender a que te refieres, pero creo que dices de pasar los argumentos a main desde el ide. Pues, si es eso, generalmente el ide tiene una opción de "pasar parámetros" al ejecutable una vez está compilado.
    De todas formas, como no entiendo bien la pregunta, si la puedes plantear de otra forma, te lo agradecería ^^.

    ResponderEliminar