¿Qué significa int argc, char * argv ?

En muchos IDE y comstackdores de C ++, cuando genera la función principal para usted, se ve así:

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

Cuando codigo C ++ sin un IDE, solo con un comstackdor de línea de comandos, escribo:

 int main() 

sin ningún parámetro ¿Qué significa esto y es vital para mi progtwig?

argv y argc son como los argumentos de la línea de comando pasan a main() en C y C ++.

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

Las variables se denominan argc ( conteo de argumentos ) y argv ( argumento vector ) 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, produciendo int main() , si no tiene la intención de procesar los argumentos de la línea de comando.

Pruebe el siguiente progtwig:

 #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; } } 

./test a1 b2 c3 con ./test a1 b2 c3 saldrá

 Have 4 arguments: ./test a1 b2 c3 

argc es la cantidad de argumentos que pasan a su progtwig desde la línea de comando y argv es la matriz 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 progtwig de esta forma (usando la syntax sh ):

 myprog arg1 arg2 'arg 3' 

Si declaró su main como int main(int argc, char *argv[]) , entonces (en la mayoría de los entornos), su main() se llamará como si fuera:

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

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

 exit(main()); 

y no obtienes los argumentos.

Dos cosas adicionales a tener en cuenta:

  1. Estas son las dos únicas firmas obligatorias para main . Si una plataforma en particular acepta argumentos adicionales o un tipo de devolución diferente, entonces esa es una extensión y no se debe confiar en ella en un progtwig 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) .

Los parámetros para main representan los parámetros de línea de comando proporcionados al progtwig cuando se inició. El parámetro argc representa el número de argumentos de línea de comando, y char *argv[] es una matriz de cadenas (punteros de carácter) que representa los argumentos individuales proporcionados en la línea de comando.

El primer parámetro es el número de argumentos proporcionados y el segundo parámetro es una lista de cadenas que representan esos argumentos.

La función main puede tener dos parámetros, argc y argv . argc es un parámetro entero ( int ), y es la cantidad de argumentos pasados ​​al progtwig.

El nombre del progtwig siempre es el primer argumento, por lo que habrá al menos un argumento para un progtwig y el valor mínimo de argc será uno. Pero si un progtwig tiene dos argumentos, el valor de argc será tres.

El parámetro argv apunta a una matriz de cadenas y se llama vector argumento . Es una matriz de cadena unidimensional de argumentos de función.

 int main(); 

Esta es una statement simple. No puede tomar ningún argumento de línea de comando.

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

Esta statement se usa cuando su progtwig debe tomar argumentos de línea de comandos. Cuando se ejecuta como tal:

 myprogram arg1 arg2 arg3 

argc , o Argument Count, se establecerá en 4 (cuatro argumentos), y argv , o Argument Vectors, se rellenará con punteros de cadena para “myprogram”, “arg1”, “arg2” y “arg3”. ¡La invocación del progtwig ( myprogram ) está incluida en los argumentos!

Alternativamente, podrías usar:

 int main(int argc, char** argv); 

Esto también es válido

Hay otro parámetro que puede agregar:

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

El parámetro envp también contiene variables de entorno. Cada entrada sigue este formato:

 VARIABLENAME=VariableValue 

Me gusta esto:

 SHELL=/bin/bash 

La lista de variables de entorno tiene una terminación nula.

IMPORTANTE: ¡NO use ningún valor de argv o envp directamente en las llamadas al system() ! Este es un gran agujero de seguridad ya que los usuarios malintencionados podrían establecer variables de entorno en los comandos de la línea de comandos y (potencialmente) causar daños masivos. En general, simplemente no use el system() . Casi siempre hay una mejor solución implementada a través de las bibliotecas C.

Ambos

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

son definiciones legales del punto de entrada para un progtwig C o C ++. Stroustrup: C ++ Style and Technique FAQ detalla algunas de las variaciones que son posibles o legales para su función principal.

    Intereting Posts