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:
- 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. *argv[]
y**argv
son exactamente equivalentes, por lo que puede escribirint main(int argc, char *argv[])
comoint main(int argc, char **argv)
.
Comentarios y valoraciones
Ten en cuenta dar visibilidad a este escrito si te fue útil.