[pyar] Int anti-intuitivo

Roberto Alsina ralsina en netmanagers.com.ar
Mie Nov 17 18:08:43 ART 2010


On Wednesday 17 November 2010 17:18:21 Tordek wrote:
> strtold está declarado en stdlib (mirá man 3 strtold); printf en 
> stdio. string.h quedó por una prueba que hice y lo dejé puesto.

Sí, lo sé. Es que normalmente al no poner los std*.h normalmente las cosas o 
andan o dan error, es la primera vez que me anda mal :-D

> Compila porque, al no haber declaración, crea automáticamente una 
> (de tipo int strtold([...]), donde [...] es lo que le hayas pasado 
> la primera vez que lo llamaste).
> 
> Lo del número raro se puede ver más pasando por asm: el caso 
> incorrecto tiene una llamada a cvtsi2sd, que "transforma un entero 
> en un float". Con eso comprobamos que la declaración implícita de 
> strtold devuelve un int. Entonces tenemos un patrón de bits que 
> representa un long double, metido en un int (y truncado). Después de 
> eso se llama a printf, y algún rastro de ese número pudo haber 
> quedado metido en algún registro intermedio.
> 
> Así que, en resumen... demonios nasales.

Indeed!



More information about the pyar mailing list