Discussion:
Copyright del stdio.h ???
(demasiado antiguo para responder)
Olaf "El Blanco"
2006-01-11 09:46:44 UTC
Permalink
OK OK OK ya se que no tiene copyrigth...

Estaba pensando que la mejor forma de ver y entender funciones era mirando
el código en donde estaban implementadas...
Cuando abro el archivo stdio.h (o cualquier otro) aparecen muchos defines
pero en ningun lado aparecen PROGRAMADAS las funciones que quiero ver:
printf, scanf, length, sqrt, etc...
Quiero comprar las mias con las de personas que tengas muchisima calidad,
prolijidad, efectividad, etc...
¿Donde se encuentran?

Muchas Gracias!
Pedro Maicas
2006-01-11 10:41:30 UTC
Permalink
Post by Olaf "El Blanco"
Cuando abro el archivo stdio.h (o cualquier otro) aparecen muchos defines
printf, scanf, length, sqrt, etc...
Amigo, ese es el meollo de "cómo" funciona el proceso
de compilación y linkado de un programa. Por eso es
que mucha gente le llama a los *.h librerías cuando
esos ficheros son solo declaraciones de funciones,
porque no han entendido lo que es un .h

El compilador solo compila, no le importa si las funciones
existen de verdad. La compilacion se hace fichero (*.c) a
fichero, no importa tampoco el contenido de otros ficheros
(supuesto que compilas varios).

Es en el linkado cuando se unen todos los ficheros objeto
procedentes de la compilacion de los fuentes y las librerías
o bibliotecas.

Resumiendo, en un .h no encontrtrás (no deberías encontrar)
código, solo encontrarás declaraciones. El código se encuentra
en otros fichero .h o -en este caso- en librerías que ya
fueron compiladas previamente y cuyo código fuente puedes
tener o no, en cualquier caso estará en algun directorio
por ahí escondido.


Saludos :-) -Pedro-

http://www.maicas.net/

e-mail en www.maicas.net
heltena
2006-01-11 14:11:45 UTC
Permalink
Una implementación que puedes mirar es la de GNU. La "stdio" está en
la librería "libc" que puedes encontrar en
ftp://sources.redhat.com/pub/glibc (yo me he bajado el fuente
ftp://sources.redhat.com/pub/glibc/releases/glibc-2.3.6.tar.gz).

En este código puedes ver que la función printf está implementada
como:

/* Write formatted output to stdout from the format string FORMAT. */
/* VARARGS1 */
int
printf (const char *format, ...)
{
va_list arg;
int done;

va_start (arg, format);
done = vfprintf (stdout, format, arg);
va_end (arg);

return done;
}

y vfprintf ....... mejor que lo mires tú, que tampoco es muy trivial.

No será la mejor librería del mundo, pero creo que con el tiempo que
lleva implementada y las veces que se ha modificado, mala, mala tengo
la impresión de que no puede ser.

Hasta pronto!!!
Olaf "El Blanco"
2006-01-12 08:17:20 UTC
Permalink
GRACIAS!!!!!!

O sea que un buen programador, nunca declarará funciones en los .h
Gracias!




"heltena" <***@gmail.com> escribi� en el mensaje news:***@g49g2000cwa.googlegroups.com...
Una implementación que puedes mirar es la de GNU. La "stdio" está en
la librería "libc" que puedes encontrar en
ftp://sources.redhat.com/pub/glibc (yo me he bajado el fuente
ftp://sources.redhat.com/pub/glibc/releases/glibc-2.3.6.tar.gz).

En este código puedes ver que la función printf está implementada
como:

/* Write formatted output to stdout from the format string FORMAT. */
/* VARARGS1 */
int
printf (const char *format, ...)
{
va_list arg;
int done;

va_start (arg, format);
done = vfprintf (stdout, format, arg);
va_end (arg);

return done;
}

y vfprintf ....... mejor que lo mires tú, que tampoco es muy trivial.

No será la mejor librería del mundo, pero creo que con el tiempo que
lleva implementada y las veces que se ha modificado, mala, mala tengo
la impresión de que no puede ser.

Hasta pronto!!!
Manuel Petit
2006-01-13 04:03:23 UTC
Permalink
Post by Olaf "El Blanco"
GRACIAS!!!!!!
O sea que un buen programador, nunca declarará funciones en los .h
Gracias!
No confundas la terminología... la declaración va en los .h
Es la definición -- o implementación si prefieres ese otro término -- la
que por regla general no debes poner en un .h


manuel,
Post by Olaf "El Blanco"
Una implementación que puedes mirar es la de GNU. La "stdio" está en
la librería "libc" que puedes encontrar en
ftp://sources.redhat.com/pub/glibc (yo me he bajado el fuente
ftp://sources.redhat.com/pub/glibc/releases/glibc-2.3.6.tar.gz).
En este código puedes ver que la función printf está implementada
/* Write formatted output to stdout from the format string FORMAT. */
/* VARARGS1 */
int
printf (const char *format, ...)
{
va_list arg;
int done;
va_start (arg, format);
done = vfprintf (stdout, format, arg);
va_end (arg);
return done;
}
y vfprintf ....... mejor que lo mires tú, que tampoco es muy trivial.
No será la mejor librería del mundo, pero creo que con el tiempo que
lleva implementada y las veces que se ha modificado, mala, mala tengo
la impresión de que no puede ser.
Hasta pronto!!!
Jorge S. de Lis
2006-01-14 18:08:13 UTC
Permalink
Post by Manuel Petit
No confundas la terminología... la declaración va en los .h
Es la definición -- o implementación si prefieres ese otro término -- la
que por regla general no debes poner en un .h
En lenguajes como Modula-2 a la declaración se le llama definición
(DEFINITION, en archivos .def), y a la implementación o definición,
implementación (IMPLEMENTATION, en archivos .mod).

Yo intento evitar la palabra definición, sencillamente. Headers, cabeceras
por un lado e implementations, implementaciones por el otro. Aunque ya sé
que los primeros no tienen sólo cabeceras, pero bueno... .h -> header.
Zara
2006-01-16 06:14:26 UTC
Permalink
On Sat, 14 Jan 2006 19:08:13 +0100, "Jorge S. de Lis"
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Post by Manuel Petit
No confundas la terminología... la declaración va en los .h
Es la definición -- o implementación si prefieres ese otro término -- la
que por regla general no debes poner en un .h
En lenguajes como Modula-2 a la declaración se le llama definición
(DEFINITION, en archivos .def), y a la implementación o definición,
implementación (IMPLEMENTATION, en archivos .mod).
Yo intento evitar la palabra definición, sencillamente. Headers, cabeceras
por un lado e implementations, implementaciones por el otro. Aunque ya sé
que los primeros no tienen sólo cabeceras, pero bueno... .h -> header.
Bueno, cada lenguaje tiene su nomenclatura. En C, y acorde al estándar
ISO, se llaman declaraciones y definiciones, respectivamente.

Saludos

Zara
Antoine Leca
2006-01-13 15:19:36 UTC
Permalink
Post by heltena
Una implementación que puedes mirar es la de GNU.
No me parece una buena idea.
Post by heltena
y vfprintf ....... mejor que lo mires tú, que tampoco es muy trivial.
No será la mejor librería del mundo, pero creo que con el tiempo que
lleva implementada y las veces que se ha modificado, mala, mala tengo
la impresión de que no puede ser.
GNU libc utiliza un mecanismo de stdio unificado con los streams de C++. El
resultado es nada senzillo (pero va muy bién). Es muy aconsejable estudiar
(y usar) los tests que vienen con las fuentes de glibc; pero creo que hay
muchas fuentes de inspiración más fácil de entender (V7, BSD, newlib para
empezar).


Antoine
Antoine Leca
2006-01-13 15:15:29 UTC
Permalink
Post by Olaf "El Blanco"
OK OK OK ya se que no tiene copyrigth...
Por supuesto que sí.
De hecho, la versión original (la de Unix V7) no tenía, pero desde aquel
entonces la ley ha cambiado en EE.UU., y ahora sería muy sorprenante que no
tinguera, o bién que hubiera caducado.
Post by Olaf "El Blanco"
Estaba pensando que la mejor forma de ver y entender funciones era
mirando el código en donde estaban implementadas...
Pués no estan allí.
Post by Olaf "El Blanco"
Quiero comp[a]rar las mias con las de personas que tengas muchisima
calidad, prolijidad, efectividad, etc...
¿Donde se encuentran?
http://minnie.tuhs.org/UnixTree/V7/usr/src/libc/stdio/

No estoy seguro del todo que es lo que busques.


Antoine
Olaf "El Blanco"
2006-01-16 07:43:36 UTC
Permalink
:
:: In news:***@g49g2000cwa.googlegroups.com,
:: heltena va escriure:
:: > Una implementación que puedes mirar es la de GNU.
::
:: No me parece una buena idea.
:
**** Por eso de que son complicadas, verdad?
:
:: > y vfprintf ....... mejor que lo mires tú, que tampoco es muy
: trivial.
:: > No será la mejor librería del mundo, pero creo que con el tiempo que
:: > lleva implementada y las veces que se ha modificado, mala, mala
: tengo
:: > la impresión de que no puede ser.
:
**** O sea que la libreria es esa libc que me he bajado (de unos cuantos
****: MBs)? ¿Ahí estan los codigo que yo llamo "ejemplos"? El code de los
****: grandes programadores? En mi linux: /usr/lib ?
:
**** Entonces tenia un error de conceptos increibles... yo llamaba
librerias
**** a las .h. Por ejemplo una libreria de Modo13 para graficos en DOS, era
**** un archivo .h donde estaban "implementadas" las funciones para usarlo.
**** Y, por el contrario, lo correcto seria encontrar el .h de apenas un KB
**** que tenga las declaraciones?
:
:
:: GNU libc utiliza un mecanismo de stdio unificado con los streams de
: C++. El
:: resultado es nada senzillo (pero va muy bién). Es muy aconsejable
: estudiar
:: (y usar) los tests que vienen con las fuentes de glibc; pero creo que
: hay
:: muchas fuentes de inspiración más fácil de entender (V7, BSD, newlib
: para
:: empezar).
::
::
:: Antoine
::
:

Loading...