Con respecto a ‘main (int argc, char * argv )’

Posibles duplicados:
¿Cuáles son los argumentos para main () para?
¿Qué significa int argc, char * argv []?

Todos los progtwigs comienzan con la definición main(int argc, char *argv[]) .

No entiendo lo que significa. Me encantaría que alguien pudiera explicar por qué usamos estos argumentos si no los usamos en el progtwig. ¿Por qué no solo: int main() ?

¿El nombre del progtwig es uno de los elementos de *argv[] y argc es el recuento de la cantidad de argumentos en *argv[] ? ¿Cuáles son los otros argumentos enviados a *argv[] ? ¿Cómo los enviamos?

    Los argumentos argc y argv de main se usan como una forma de enviar argumentos a un progtwig, la forma más familiar posible es usar la buena terminal donde un usuario puede escribir el cat file . Aquí, la palabra cat es un progtwig que toma un archivo y lo envía a salida estándar ( stdout ).

    El progtwig recibe el número de argumentos en argc y el vector de argumentos en argv , en el de arriba el argumento del argumento sería dos (el nombre del progtwig cuenta como el primer argumento) y el elemento del argumento contendría [ cat , file , nulo ] Mientras que el último elemento es un puntero nulo.

    Comúnmente, lo escribirías así:

     int // Specifies that type of variable the function returns. // main() must return an integer main ( int argc, char **argv ) { // code return 0; // Indicates that everything went well. } 

    Si su progtwig no requiere ningún argumento, es igualmente válido escribir una función main de la siguiente manera:

     int main() { // code return 0; // Zero indicates success, while any // Non-Zero value indicates a failure/error } 

    En las primeras versiones del lenguaje C, no había ninguna int antes main ya que esto estaba implícito. Hoy, esto se considera un error.

    En sistemas compatibles con POSIX (y Windows), existe la posibilidad de utilizar un tercer parámetro char **envp que contiene un vector de las variables de envio del progtwig. Existen otras variaciones de la lista de argumentos de la función main , pero no la detallaré aquí porque no es estándar.

    Además, la denominación de las variables es una convención y no tiene un significado real. Siempre es una buena idea adherirse a esto para no confundir a los demás, pero sería igualmente válido definir main como

     int main(int c, char **v, char **e) { // code return 0; } 

    Y para su segunda pregunta, hay varias formas de enviar argumentos a un progtwig. Te recomendaría que busques en la familia de funciones exec*() que es POSIX -standard, pero probablemente sea ​​más fácil simplemente usar system ("command arg1 arg2") , pero el uso de system() usualmente es mal visto como no se garantiza que funcione en todos los sistemas. No lo he probado yo mismo; pero si no hay bash , zsh u otro shell instalado en un * NIX-system, el system() fallará.

    Esos son para pasar argumentos a su progtwig, por ejemplo, desde la línea de comandos, cuando se invoca un progtwig

     $ gcc mysort.c -o mysort $ mysort 2 8 9 1 4 5 

    Arriba, el mysort del progtwig se ejecuta con algunos parámetros de línea de comando. Dentro de main( int argc, char * argv[]) , esto daría como resultado

     Argument Count, argc = 7 

    ya que hay 7 argumentos (contando el progtwig), y

     Argument Vector, argv[] = { "mysort", "2", "8", "9", "1", "4", "5" }; 

    El siguiente es un ejemplo completo.

     $ cat mysort.c #include  int main( int argc, char * argv [] ) { printf( "argc = %d\n", argc ); for( int i = 0; i < argc; ++i ) { printf( "argv[ %d ] = %s\n", i, argv[ i ] ); } } $ gcc mysort.c -o mysort $ ./mysort 2 8 9 1 4 5 argc = 7 argv[ 0 ] = ./mysort argv[ 1 ] = 2 argv[ 2 ] = 8 argv[ 3 ] = 9 argv[ 4 ] = 1 argv[ 5 ] = 4 argv[ 6 ] = 5 

    [Las cadenas de caracteres "2", "8", etc. se pueden convertir a números usando alguna función de conversión de carácter a número, por ejemplo, atol() (enlace )]

    Con argc (conteo de argumentos) y argv (argumento vector) puede obtener el número y los valores de los argumentos pasados ​​cuando su aplicación ha sido iniciada.

    De esta forma puede usar parámetros (como por ejemplo, ” -version ) cuando su aplicación se comience a actuar de una manera diferente.

    Pero también puedes usar int main(void) como prototipo en C.

    Hay un tercer prototipo (menos conocido y no estándar) con un tercer argumento que es envp . Contiene variables de entorno.


    Recursos:

    • Wikipedia – Función principal, C y C ++

    argc significa la cantidad de argumentos que se pasan al progtwig. char* argv[] son los argumentos pasados. argv[0] es siempre el nombre del progtwig en sí. No estoy 100% seguro, pero creo que int main() es válido en C / C ++.

    Las preguntas frecuentes de comp.lang.c tratan la pregunta

      "¿Cuál es la statement correcta de main ()?" 

    en la pregunta 11.12a .

    argc es el número de argumentos de la línea de comando y argv es una matriz de cadenas que representan los argumentos de la línea de comando.

    Esto le da la opción de reactjsr a los argumentos pasados ​​al progtwig. Si no espera ninguno, también puede usar int main .

    argc es el número de argumentos de línea de comando dados al progtwig en tiempo de ejecución, y argv es una matriz de matrices de caracteres (más bien, una matriz de C-strings) que contiene estos argumentos. Si sabe que no va a necesitar los argumentos de la línea de comando, puede declarar su principal al tomar un argumento de void , en su lugar:

     int main(void) { /* ... */ } 

    Esos son los únicos dos prototipos definidos para main según los estándares, pero algunos comstackdores también permiten un tipo de retorno de void . Más sobre esto en Wikipedia .

    Puede ejecutar su aplicación con parámetros como app -something -somethingelse . int argc representa el número de estos parámetros y char *argv[] es una matriz con parámetros reales que se pasan a su aplicación. De esta manera puede trabajar con ellos dentro de su aplicación.