You are on page 1of 4

CAPTULO 7 LA FUNCIN MAIN

Todos los programas en lenguaje C deben tener la funcin main(). Algunos programadores colocan el main() al principio del archivo, otros al final, puede ir en cualquier parte del archivo fuente. 7.1. ARGUMENTOS EN LA LINEA DE ORDENES El lenguaje C genera cdigo procurando que el intercambio de argumentos sea compatible con UNIX cuando se realiza la ejecucin de un programa. Por ejemplo, es muy comn que los programas ( tal es el caso de los comandos del sistema operativo) acepten una serie de parmetros al realizar la ejecucin, es decir: Ej 7.1. Paso de parmetros aun programa o comando en la lnea de rdenes.
copy archivo1 archivo2 dir *.c /p attrib - r -h -s *.* tarea /AYUDA tarea /?

En el Turbo C,
argc, argv, env

por convencin la funcin main() acepta tres parmetros (o argumentos), ellos son:

Argumentos
argc argv env

Descripcin # de argumentos Direccin de una matriz de punteros a c/u de los argumentos Direccin de una matriz de punteros a las variables de entorno

Tabla 7.1. Descripcin de argumentos de la funcin main().

Es decir
main(int argc, char *argv[], char *env[]); argc : argv[1]: argv[2]: argv[argc-1]: argv[argc]: argv[0]: Nmero de argumentos pasados Direccin del primer argumento Direccin del 2 argumento Direccin del ultimo argumento NULL

Apunta al primer caracter del nombre del programa

58

Preparado por Juan Ignacio Huircn

Cada elemento env[] almacena una cadena de la forma ENVAR=valor , donde ENVAR es una variable de ambiente o de entorno, tal como el PATH. el elemento valor contiene el valor para el cual est seteada la variable ENVAR. Es decir, si la variable de ambiente es el PATH, su valor puede ser C:\DOS; C:\TC;C:\TC\BIN, etc. Algunos formatos vlidos de la funcin main
main(); main(int argc); main(int argc, char *argv[]); main(int argc, char *argv[], char *env[]);

Ej 7.2. Uso de los argumentos en la funcin main().


/* Argu.c */ #include <stdio.h> void main(int argc,char *argv[],char *env[]) { int i; for(i=1;i<argc;i++) printf("%s \n",argv[i]); for(i=0;ent[i]!=NULL;i++) printf("%s \n",env[i]); }

AL compilar dicho cdigo fuente, se generar el programa Argu.exe , el cual puede ser ejecutado desde el "prompt" del sistema operativo. Si se ejecuta Argu, solamente imprime las variables de ambiente Si se ejecuta Argu 1, imprimir el primer argumento y luego las variables de ambiente

Ej 7.3. El siguiente programa imprime el nmero de argumentos pasados y detectados


/*--------------------------------------------------------------------------------pro.c Imprime los argumentos pasados y el # de argumentos detectados. Este programa debe ejecutarse de la siguiente forma: Pro Hola 1 2 /p

---------------------------------------------------------------------------------*/ #include <stdio.h> void main(int argc,char *argv[],char *ent[]) { int i; for(i=0;i<argc;i++) printf("%s \n",argv[i]); printf("\n%d\n",argc); }

Herramientas de programacin A este programa se le han pasado 4 argumentos: HOLA, 1 ,2 y /p Adems imprime el nombre del programa, pues este se encuentra almacenado en argv[0].

59

Ej 7.4. Un ejemplo clsico del uso de argumentos puede ser el paso de un parmetro que modifique la ejecucin de un determinado programa, esto de acuerdo al argumento pasado. Como los argumento son cadenas de caracteres, toda comparacin que se realice, se debe hacerse con funciones dedicadas a tal efecto.
#include <stdio.h> #include <string.h> void main(int argc,char *argv[],char *ent[]) { if(!strcmp(argv[1],"/?")) { printf("pro [/ARG]\n"); printf("[ARG]\n"); printf("/? : Ayuda\n"); printf("/1 : Imprime HOLA\n"); } if(!strcmp(argv[1],"/1")) { printf("HOLA\n"); } }

7.2. VALORES RETORNADOS POR LA FUNCIN main()


El valor retornado por la funcin main() es un cdigo de estado del programa, un nmero entero (int). Sin embargo, si el programa usa la instruccin exit para terminar, el valor retornado por el main ser el argumento pasado al llamar a la funcin exit.Cuando el main() retorna un valor, este es almacenado en una variable de ambiente del sistema operativo. Ej 7.5. Funcin main retornando el valor 1.
int main() { ... return(1); } void main() { ... exit(1); }

Si quiere indicar que al main() no retorna valores y no se le pasan argumentos se escribe con el siguiente formato
void main(void)

60

Preparado por Juan Ignacio Huircn