[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