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

Iniciado por Locura_23, 23 Mayo 2021, 21:18 PM

0 Miembros y 1 Visitante están viendo este tema.

Locura_23

Para qué sirven exactamente estos argumentos en main ?

DtxdF

#1
Hola @Locura_23

argc: Argument Count, que indica la cantidad de argumentos dados por la entidad que ejecutará este programa.
argv: Argument Vector, ya serían los argumentos proporcionados en sí, siendo una lista de cadenas.

Si, por ejemplo, tenemos el siguiente código:

main.c:
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
   char *arg;
   while ((arg = *argv++))
       puts(arg);

   return EXIT_SUCCESS;

}


Compilamos:

cc main.c -o main

Al ejecutarlo sin argumentos este programa, se mostrará en la salida del terminal el nombre del programa, que para este caso es main.c.

Código (bash) [Seleccionar]
./main
# Salida:
# ./main


Pero si ejecutaramos el programa con argumentos:

Código (bash) [Seleccionar]
./main "Primer argumento" "Segundo argumento" "Tercer argumento"
# Salida:
# ./main
# Primer argumento
# Segundo argumento
# Tercer argumento


También si escribe un tercer argumento para la función main (llamémosle env), se mostrarán las variables de entorno.

~ DtxdF

K-YreX

Un programa cuando se ejecuta puede recibir una serie de argumentos.
Esto se suele obviar porque normalmente ejecutamos los programas mediante un doble clic en el .exe.

Imagina que tienes tu programa en C/C++ y lo compilas. Ahora tienes como resultado tu ejecutable: programa.exe.
Para ejecutarlo puedes buscarlo y hacer doble clic o puedes acceder a la ruta mediante la Consola (cmd/Powershell de Windows) o Terminal (de Linux) mediante:
cd ruta_a_tu_ejecutable
Y ahora ejecutar el programa con o sin argumentos:

./programa.exe
./programa.exe cada palabra extra es un argumento

En el segundo caso "cada palabra extra es un argumento" son los argumentos que recibe el programa.
Para manejar estos argumentos en el propio programa están argc y argv:
- argc contiene el número de argumentos recibidos. Siempre es >= 1.
- argv es un array de char[] donde cada uno es una de las palabras

argc = 7
argv[0] = "./programa.exe"
argv[1] = "cada"
argv[2] = "palabra"
...
argv[6] = "argumento"

Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;

Locura_23

Entiendo, muchas gracias por sus respuestas.