main() de C [Was: Re: Re: Benchmarking en distintos lenguajes [ Era algo así como cliente en jabber... ] ]

Horst H. von Brand vonbrand en inf.utfsm.cl
Mie Dic 5 18:15:08 CLST 2007


Rodrigo Fuentealba <darkprox en gmail.com> wrote:
> 2007/12/4, rodrigo ahumada <rodahummont en yahoo.com.ar>:
> > Alvaro Herrera <alvherre en alvh.no-ip.org> dijo:
> > >rodrigo ahumada escribió:

> > >> > Ni tanto mas feo que la version C.
> > >>
> > >> Ambos leguajes pecan al final. Por que @#%^&$@#$ llaman "void" a un
> > >> procedimiento?

> ¿Porque no quieren devolver nada?

Para que quieres procedimientos?

> La idea (según lo que he leído) es que el pecado es hacer que la
> función main no devuelva nada (void main();), es mejor devolver el
> estado con el que terminó el programa (que si es totalmente correcto,
> es "return 0"). De esta manera, cuando los integras con otras
> aplicaciones, éstas son capaces de saber si el programa cumplió con su
> cometido.

No. El cuento es mas profundo.

El estandar de C permite implementar funciones de distinta forma segun lo
que retornen (obvio; p.ej. en i386 una funcion que retorna un double lo
retorna en un registro de punto flotante, si un int (o similar) en EAX, si
retorna un struct hace alguna brujeria a traves de un puntero; dependiendo
de la arquitectura usar mecanismos diferentes para "retorno algo" o "no
retorno nada" puede tener costos muy diferentes). A su vez, la "funcion"
main es interfaz con el ambiente en que se ejecuta el programa, que a su
vez puede tener un manejo radicalmente diferente a una funcion normal.
/Generalmente/ main se implementa igual que una funcion (y la brujeria de
conectarla con el ambiente (armarle argc, argv a lo C; obtener el valor
retornado y darlo como "resultado exito/fracaso") se hace "fuera"), y
/muchas implementaciones/ no hacen diferencia especial entre "retorna int"
y "no retorna nada".
-- 
Dr. Horst H. von Brand                   User #22616 counter.li.org
Departamento de Informatica                    Fono: +56 32 2654431
Universidad Tecnica Federico Santa Maria             +56 32 2654239
Casilla 110-V, Valparaiso, Chile               Fax:  +56 32 2797513


Más información sobre la lista de distribución Linux