/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Como debe definirse la función "main"

 
      Índice del Foro elrincondelc.com -> FAQ de C
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
rir3760



Registrado: 01 Oct 2004
Mensajes: 7516
Ubicación: Mexico

MensajePublicado: 26/07/2012 2:24 pm
Título: Como debe definirse la función "main"

La función "main" es el punto de entrada cuando se ejecuta un programa. Debe definirse (sin indicar su prototipo) en una de las dos formas que se explican a continuación.


----


Sin parámetros. En este caso su definición debe ser la siguiente o una equivalente:
Código:
int main(void)
{
   /* Sentencias */
   
   return N; /* "N" es algun valor de tipo "signed int" */
}

Si la aplicación termina sin errores se debe retornar el valor 0 o EXIT_SUCCESS. En caso de error otro valor o EXIT_FAILURE. Ambas macros están definidas en el encabezado <stdlib.h>, el objetivo de su uso es indicar una salida normal o por error sin depender de la implementación.

Una definición equivalente es una donde se utilizan macros (mediante la directiva "define") o alias (mediante el uso de "typedef").

Por ejemplo:
Código:
#include <stdio.h>
#include <stdlib.h>

#define ENTERO  int
typedef void nada;

ENTERO main(nada)
{
   /* ... */
   
   return EXIT_SUCCESS;
}

Por supuesto si se define la función sin parámetros se debe tratar, en lo posible, de utilizar forma indicada (sin macros ni alias).


----


Con dos parámetros. En esta forma el primero debe ser de tipo "int" y el segundo de tipo "char **" (o su equivalente "char *[]"). Como en el primer caso se pueden utilizar formas equivalentes utilizando macros o alias. La definición clásica es:
Código:
int main(int argc, char *argv[])
{
   /* Sentencias */
   
   return N; /* "N" es algun valor de tipo "signed int" */
}

Los nombres "argc" y "argv" son los convencionales, si bien nada impide utilizar otros ello debe realizarse solo por razones de peso.

Con esta forma se tienen las siguientes garantías:

1) El valor de "argc" es no-negativo.

2) El valor de "argv[argc]" es NULL.

3) Usualmente el nombre de la aplicación puede accederse mediante la dirección indicada por "argv[0]", si ello no es posible el carácter "argv[0][0]" sera igual a '\0'.

4) Todas las cadenas apuntadas por "argv" pueden ser modificadas.

Un programa de ejemplo donde se muestra (mediante indices y aritmética de punteros) como procesar los parámetros de "main":
Código:
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{   
   int i;
   char **p;
   
   puts("Lista de argumentos (1):");
   for (i = 0; i <= argc; i++)
      printf(
         "argv[%d] == \"%s\"\n",
         i,
         argv[i] != NULL ? argv[i] : "NULL"
      );
   
   puts("----");
   
   puts("Lista de argumentos (2):");
   for (p = argv; p <= argv + argc; p++)
      printf(
         "argv[%ld] == \"%s\"\n",
         (long int) (p - argv),
         *p != NULL ? *p : "NULL"
      );
   
   return EXIT_SUCCESS;
}



----


¿Porque debe evitarse definir la función "main" en alguna otra forma?

Porque las dos indicadas son las únicas garantizadas por el estándar de C, si se utiliza alguna otra (no importa cual) su soporte depende del compilador utilizado.
_________________
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Volver arriba
      Índice del Foro elrincondelc.com -> FAQ de C
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com