Hp07 La Función Main

Anuncio
CAPÍTULO 7
LA FUNCIÓN MAIN
Todos los programas en lenguaje C deben tener la función 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 código procurando que el intercambio de argumentos sea compatible con UNIX
cuando se realiza la ejecución de un programa. Por ejemplo, es muy común que los programas ( tal es el caso de
los comandos del sistema operativo) acepten una serie de parámetros al realizar la ejecución, es decir:
Ej 7.1. Paso de parámetros aun programa o comando en la línea de órdenes.
copy archivo1 archivo2
dir *.c /p
attrib - r -h -s *.*
tarea /AYUDA
tarea /?
En el Turbo C,
por convención la función main() acepta tres parámetros (o argumentos), ellos son:
argc, argv, env
Argumentos
argc
argv
env
Descripción
# de argumentos
Dirección de una matriz de punteros a c/u de los argumentos
Dirección de una matriz de punteros a las variables de entorno
Tabla 7.1. Descripción de argumentos de la función main().
Es decir
main(int argc, char *argv[], char *env[]);
argc :
argv[1]:
argv[2]:
argv[argc-1]:
argv[argc]:
argv[0]:
Número de argumentos pasados
Dirección del primer argumento
Dirección del 2º argumento
Dirección del ultimo argumento
NULL
Apunta al primer caracter del nombre del programa
58
Preparado por Juan Ignacio Huircán
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 válidos de la función 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 función 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 código 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 número 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 programación
59
A este programa se le han pasado 4 argumentos: HOLA, 1 ,2 y /p
Además imprime el nombre del programa, pues este se encuentra almacenado en argv[0].
Ej 7.4. Un ejemplo clásico del uso de argumentos puede ser el paso de un parámetro que modifique la ejecución
de un determinado programa, esto de acuerdo al argumento pasado.
Como los argumento son cadenas de caracteres, toda comparación 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 FUNCIÓN main()
El valor retornado por la función main() es un código de estado del programa, un número entero (int).
Sin embargo, si el programa usa la instrucción exit para terminar, el valor retornado por el main será el
argumento pasado al llamar a la función exit.Cuando el main() retorna un valor, este es almacenado en una
variable de ambiente del sistema operativo.
Ej 7.5. Función 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 Huircán
Descargar