Saltar al contenido

¿Qué significa int argc, char *argv?[] ¿significar?

No dudes en compartir nuestro sitio y códigos con otro, necesitamos de tu ayuda para hacer crecer esta comunidad.

Solución:

argv y argc son cómo se pasan los argumentos de la línea de comandos a main() en C y C++.

argc será el número de cadenas apuntadas por argv. Esto será (en la práctica) 1 más el número de argumentos, ya que prácticamente todas las implementaciones antepondrán el nombre del programa al array.

Las variables se nombran argc (recuento de argumentos) y argv (vector de argumento) por convención, pero se les puede dar cualquier identificador válido: int main(int num_args, char** arg_strings) es igualmente válido.

También se pueden omitir por completo, dando como resultado int main()si no tiene la intención de procesar los argumentos de la línea de comandos.

Prueba el siguiente programa:

#include 

int main(int argc, char** argv) 
    std::cout << "Have " << argc << " arguments:" << std::endl;
    for (int i = 0; i < argc; ++i) 
        std::cout << argv[i] << std::endl;
    

ejecutarlo con ./test a1 b2 c3 dará salida

Have 4 arguments:
./test
a1
b2
c3

argc es el número de argumentos que se pasan a su programa desde la línea de comando y argv es el array de argumentos

Puede recorrer los argumentos sabiendo el número de ellos como:

for(int i = 0; i < argc; i++)

    // argv[i] is the argument at index i

Supongamos que ejecuta su programa de esta manera (usando sh sintaxis):

myprog arg1 arg2 'arg 3'

Si declaraste tu principal como int main(int argc, char *argv[])entonces (en la mayoría de los entornos), su main() será llamado como si gustara:

p =  "myprog", "arg1", "arg2", "arg 3", NULL ;
exit(main(4, p));

Sin embargo, si declaraste tu principal como int main()se llamará algo así

exit(main());

y no obtienes los argumentos aprobados.

Dos cosas adicionales a tener en cuenta:

  1. Estas son las únicas dos firmas estándar obligatorias para main. Si una plataforma en particular acepta argumentos adicionales o un tipo de devolución diferente, entonces es una extensión y no se debe confiar en ella en un programa portátil.
  2. *argv[] y **argv son exactamente equivalentes, por lo que puede escribir int main(int argc, char *argv[]) como int main(int argc, char **argv).

Comentarios y valoraciones

Ten en cuenta dar visibilidad a este escrito si te fue útil.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *