Vous êtes sur la page 1sur 8

FUNCION MAIN

1. Sinopsis
Durante la fase de enlazado de la compilacin, el "linker" aade a cualquier
programa C++ un mdulo especial, de inicio, que es realmente el punto de entrada
a la ejecucin del programa. Este mdulo realiza diversas tareas preparatorias a la
ejecucin propiamente dicha. Por ejemplo, iniciar todas las variables estticas o
globales y realizar determinadas verificaciones del hardware. Finalmente pasa el
control a una funcin que debe responder al nombre de main y le pasa algunos
argumentos en base a datos que ha recibido a su vez del Sistema Operativo; esta
es la razn por la que todos los programas C++ deben contener una funcin con
este nombre. As pues, main representa el punto de la ejecucin a partir del cual el
programador toma el control de la ejecucin, antes de esto ya han sucedido
muchas cosas en nuestro programa. A su vez el punto de finalizacin de esta
funcin, su punto de retorno (return) significa el fin del programa, pero recuerde
que existe otra forma de terminar el programa, que puede ser utilizada desde
cualquier punto (sin necesidad de volver a la funcin main), consiste en utilizar la
funcin exit de la Librera Estndar.
2. Argumentos
La funcin main es imprescindible en cualquier programa C/C++ representa el
punto de inicio de su ejecucin. Por lo general, su declaracin adopta la forma:
int main();
Aunque en realidad, el mdulo de inicio la invoca con dos parmetros (recibidos a
su vez del SO), denominados tradicionalmente argc y argv, contracciones de
"argument count" y "argument vector" respectivamente. El primero es un entero
que representa el nmero de comandos que se pasan; el segundo es un puntero a
una matriz de cadenas literales de distintas longitudes (es decir: puntero a matriz
de punteros); cada una de estas cadenas representa en ltimo extremo los
comandos iniciales que se quieren pasar al programa, generalmente para
controlar aspectos de su comportamiento. As pues, la declaracin ms genrica
de main es del tipo:
int main(int argc, char* argv[]);
Nota: el Estndar establece que el compilador debe aceptar
para main cualquiera de las dos formas anteriores.
Por convencin, argv[0] es el nombre con que se ha llamado al programa
(normalmente ser el nombre del fichero ejecutable incluyendo su direccin
completa -path-). Este dato es proporcionado automticamente por el SO; as
pues, el valor mnimo para argc es 1. Despus seguirn los que introduzcamos en
la lnea de comandos, separados por espacios.
2.1 Como ejemplo, puede usarse el siguiente programa, al que
llamaremos prueba.exe:
#include <stdio.h> // Prueba de parmetros para funcin main

int main(int argc, char* argv[]) {
int i;
printf("Se han pasado %3d argumentos:\n", argc);
for(i=0; i<argc; i++) printf("%5d- %s\n", i, argv[i]);
return 0;
}

Si introducimos en la lnea de comandos: prueba se pasan seis, parametros, se
obtiene la siguiente salida:
Se han pasado 6 argumentos:
1- D:\ZF\LEARNC\PRUEBA.EXE
2- prueba
3- se
4- pasan
5- seis,
6- parametrosS

Se ha dicho que argv es un puntero a matriz de punteros, y en el ejemplo hemos
utilizado la expresin argv[i], algo que a primera vista puede chocar, ya
que argv no es una matriz. En realidad la declaracin completa: char*
argv[] significa puntero-a-matriz-de-caracteres, para distinguirlo de char* argv que
sera simplemente puntero-a-carcter.
2.2 Los argumentos anteriores son recogidos por el sistema en forma de
sendas variables globales _argc y _argv definidas en la cabecera
<dos.h>. A continuacin se expone una variacin del programa anterior
que utiliza estas variables:
#include <iostream>
using namespace std;
#include <dos.h> // necesario para _argc y argv

int main (int argc, char* argv[]) { // ==============
cout << "Se han pasado " << _argc << " argumentos:" << endl;
for (int i = 0; i < _argc; ++i)
cout << " " << i << "- " << _argv[i] << endl;
return 0;
}
La salida es la misma que en el caso anterior.
3. Restricciones
La funcin main adolece de ciertas limitaciones que la diferencian del resto de
funciones C++:
No puede ser invocada explcitamente a lo largo del programa, es invocada
de forma automtica por el mdulo de inicio
No puede obtenerse su direccin, por lo tanto no pueden declararse
punteros a ella:
int (* pmain)() = &main; // Error!!
No puede ser sobrecargada
No puede ser declarada como inline
main debe estar en el espacio global de una de las unidades de
compilacin del programa, lo que significa que no puede pertenecer a una
clase.
4. Valor devuelto por main
En muchos sistemas operativos el valor devuelto por la funcin main es utilizado
como control de estado para el entorno desde el que se ha ejecutado el programa
(este valor es considerado el estado de retorno del programa). En UNIX, MS-DOS
y MS Windows, los 8 bits ms bajos del valor devuelto son pasados al programa
invocante o al intrprete de comandos. Este "estado de retorno" se utiliza en
ocasiones para cambiar el curso de un programa, un proceso por lotes o un guin
para el ejecutor de comandos.
Algunos compiladores pueden generar un aviso de error si se intenta compilar un
programa cuya funcin main no devuelva un int. Por contra, algunas plataformas
pueden provocar fallos cuando estos programas arrancan o a su terminacin, ya
que esperan un int de retorno.
En los programas C++ no es necesario devolver nada desde la funcin main,
aunque en realidad la definicin de esta sea int main(). La razn es que el
Estndar garantiza que si main llega a su final alcanzando el corchete de cierre "}"
sin haber encontrado una sentencia return, el compilador debe devolver
automticamente un 0 indicando un final correcto, de forma que en ausencia de
ningn retorno el compilador proporciona automticamente un return 0; [2].
Nota: no obstante lo anterior, el comportamiento concreto vara de un
compilador a otro. Por ejemplo, un programa en el que se alcanza el corchete
de cierre de la funcin main sin ninguna sentencia de retorno compila sin
dificultad ni aviso de ningn tipo en Borland C++ 5.5, mientras que MS Visual
C++ 6.0 avisa: warning C4508: 'main' : function should return a value; 'void'
return type assumed.
En cualquier caso, es prctica de buena programacin incluir un valor de retorno
para la funcin main. Tradicionalmente 0 significa una terminacin correcta del
programa, cualquier otro valor es seal de terminacin anormal (error o
excepcin).
Si el programa termina por una invocacin a la funcin exit, el valor devuelto
por main es el argumento pasado a exit . Por ejemplo, si el programa contiene la
llamada exit(1), el valor devuelto es 1.
4.1 Existen solamente tres valores completamente estndar y portables que
puedan utilizarse como retorno para la funcin main, o como argumento
para la funcin exit:
El clsico entero de valor 0.
La constante simblica EXIT_SUCCESS definida en <stdlib.h>
La constante EXIT_FAILURE definida en <stdlib.h>
Si se utiliza cualquiera de los dos valores 0 o EXIT_SUCCESS se garantiza que el
compilador los trasladar a un cdigo que sea considerado terminacin correcta
por el Sistema Operativo. Si se utiliza EXIT_FAILURE el compilador lo trasladar a
un cdigo que ser considerado como terminacin errnea por el Sistema
Operativo.
4.2 Algunos sistemas, como Unix, MS-DOS y Windows, truncan el entero
pasado a exit o devuelto por main, a un unsigned char, con objeto de
utilizarlos en el fichero de rdenes del intrprete de comandos, en un
fichero de ejecucin por lotes, o en el proceso que invoc el programa.
Algunos programadores utilizan valores positivos para indicar diferentes
razones de fallo, excepcin o finalizacin del programa, pero estos usos
no son necesariamente portables ni funcionan en todas las
implementaciones. Sin embargo C++ proporciona la posibilidad de
devolver valores que son totalmente portables mediante la funcin atexit



OPERADORES
Los operadores que se encuentra presente en los lenguajes de programacin
La tabla siguiente es una lista que muestra el orden de precedencia y la
asociatividad de todos los operadores del lenguaje de programacin C++. Estn
listados de arriba a abajo por orden de precedencia descendente y con la misma
descendencia en la misma celda (puede haber varias filas de operadores en la
misma celda). La precedencia de los operador es no cambia por la sobrecarga.

Operador Descripcin Asociatividad
:: Resolucin de mbito (solo C++) Izquierda a
derecha
++ --
()
[]
.
->
typeid()


Post- incremento y decremento
Llamada a funcin
Elemento de vector
Seleccin de elemento por referencia
Seleccin de elemento con puntero
Informacin de tipo en tiempo de ejecucin (solo
C++)
++ --
+ -
! ~
(type)
*
&
Pre- incremento y decremento
Suma y resta unitaria
NOT lgico y NOT binario
Conversin de tipo
Indireccin
Direccin de
Derecha a
izquierda
.* ->* Puntero a miembro (solo C++) Izquierda a
derecha
* / % Multiplicacin, divisin y mdulo
+ - Suma y resta
<< >> Operaciones binarias de desplazamiento
< <=
> >=
Operadores relaciones "menor que", "menor o igual
que", "mayor que" y "mayor o igual que"
== != Operadores relaciones "igual a" y "distinto de"
& AND binario
^ XOR binario
| OR binario
&& AND lgico
|| OR lgico
=
+= -=
*= /= %=
<<= >>=
&= ^= |=
Asignaciones

Derecha a
izquierda
throw
Operador Throw (lanzamiento de excepciones, solo
C++)

,
Este es el operador de menor prioridad en C. Sirve
para separar una coleccin de expresiones, que se
irn evaluando de izquierda a derecha
Izquierda a
derecha










Avance del programa con Funcin Main

Vous aimerez peut-être aussi