2010-09-17 31 views
10

Cada vez que se crea un proyecto (utilidad de línea de comandos estándar) con Xcode, mi función principal comienza a buscar como esto:¿Cuáles son los argumentos para main() para?

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

¿Qué es todo esto en el paréntesis? ¿Por qué usar esto en lugar de solo int main()?

+2

El estándar C reconoce 'int main (int argc, char * argv [])' (o equivalente o 'int main (void)') pero no su versión con 'argv' modificado con' const' (es una extensión proporcionada por su implementación). Si desea que su código sea portátil para otras implementaciones, elimine 'const'. – pmg

+2

@pmg: O, dado que el OP no sabe lo que 'argc' y' argv' son de todos modos, simplemente reemplázalos con 'void'. –

+3

¿Está abajo Google? – Olaf

Respuesta

1

Estos son para el uso de los argumentos de la línea de comandos -

argc contiene el número de argumentos en la línea de comandos (incluyendo el nombre del programa), y argv es la lista de argumentos reales (representado como personaje instrumentos de cuerda).

38

main recibe el número de argumentos y los argumentos que se le pasan al iniciar el programa, para que pueda acceder a él.

argc contiene el número de argumentos, argv contiene punteros a los argumentos. argv [argc] es siempre un puntero NULL. Los argumentos generalmente incluyen el nombre del programa en sí.

Normalmente, si se ejecuta el programa como ./myprogram

  • argc es 1;
  • argv [0] es la cadena "./myprogram"
  • argv [1] es un puntero NULL

Si ejecuta su programa como ./myprogram /tmp/somefile

  • argc es 2;
  • argv [0] es la cadena "./myprogram"
  • argv [1] es la cadena "/ tmp/somefile"
  • argv [2] es un puntero NULL
1

Estos son solía pasar los parámetros de la línea de comando.

Por ejemplo: si quieres pasar un nombre de archivo en el proceso desde fuera entonces

myExe.exe "filename.txt" 

la línea "archivo.txt" orden será almacenada en argv [], y el número de línea de comandos el parámetro (el recuento) se almacenará en argc.

3

Aunque no cubiertos por las normas, en Windows y la mayoría de las versiones de Unix y Linux, main puede tener hasta tres argumentos:

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

El último es similar a argv (que es una matriz de cadenas, como se describe en otras respuestas, especificando argumentos para el programa pasado en la línea de comando.)

Pero contiene las variables de entorno, por ejemplo PATH o cualquier otra cosa que configure en el shell de su sistema operativo. Es nulo terminado por lo que no hay necesidad de proporcionar un argumento de recuento.

+2

envp es, quizás, una extensión de su implementación: no está descrito por el Estándar ('C89' o' C99') – pmg

+0

@pmg - corrigió la respuesta, eliminando la referencia estándar incorrecta. –

+0

"Mac OS X y Darwin tienen un cuarto parámetro que contiene información arbitraria suministrada por el sistema operativo, como la ruta al binario en ejecución: ' int main (int argc, char ** argv, char ** envp, char ** apple) ; '' http://en.wikipedia.org/wiki/Main_function#C_and_C.2B.2B –

0

main() es una función que realmente puede tomar un máximo de tres parámetros o sin parámetros. Los siguientes son los parámetros que main() puede tomar es el siguiente: -

1) int argc: contiene el número de argumentos pasados ​​(desde el símbolo del sistema) durante la ejecución del programa o puede decir que es usado para mantener un registro del número de variables pasadas durante la ejecución del programa. No puede contener el valor negativo. P.ej. Si pasa su archivo ejecutable "./a.out", eso se considerará como un parámetro y, por lo tanto, el valor de argc será 0, es decir, se pasa 1 valor.

2) char * argv []: es una matriz de punteros de caracteres que contiene la dirección de las cadenas (matriz de caracteres) que se pasan desde el símbolo del sistema durante la ejecución del programa. P.ej. en el ejemplo anterior si escribiste argv [argc], es decir, argv [0] en cout, entonces dará ./a.out como salida.

3) char * envp []: también es una matriz de puntero de carácter que se utiliza para mantener la dirección de las variables de entorno que se utilizan en el programa. Las variables de entorno son el conjunto de valores nominales dinámicos que pueden afectar la forma en que se comportará el proceso en la computadora. Por ejemplo, el proceso en ejecución desea almacenar archivos temporales y luego invocará variables de entorno TEMP para obtener una ubicación adecuada.

Cuestiones relacionadas