[pyar] Int anti-intuitivo
Tordek
kedrot en gmail.com
Mie Nov 17 17:18:21 ART 2010
On 17/11/10 16:21, Roberto Alsina wrote:
> On Wednesday 17 November 2010 15:30:07 Tordek wrote:
>> Error: strtold lleva 2 parámetros: el segundo indica donde terminó
>> de evaluar. (Así podés elegir si querés el chequeo estilo Python, o
>> más relajado.)
>
> Es más raro todavía. No tengo idea de porqué si no pongo los includes
>
> #include<stdlib.h>
> #include<stdio.h>
> #include<string.h>
>
> Me da ese numero raro, pero si los pongo da bien y no me deja llamar a strtold
> con un solo argumento.
strtold está declarado en stdlib (mirá man 3 strtold); printf en
stdio. string.h quedó por una prueba que hice y lo dejé puesto.
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.
--
Guillermo O. «Tordek» Freschi. Programador, Escritor, Genio Maligno.
http://tordek.com.ar :: http://twitter.com/tordek
http://www.arcanopedia.com.ar - Juegos de Rol en Argentina
More information about the pyar
mailing list