Leginkabb azert rugoztok ezen a jelentektelen aprosagon, mert nem igazan ertitek, h hogyan mukodik a cdecl calling convention x86-on.
Egyszeru adat tipusok visszateresi ertekei igy alakulnak x86_64-en:
[unsigned] char : al
[unsigned] short : ax
[unsigned] int : eax
[unsigned] long: rax
float : st(0)
double : st(0)
void * : rax
akarmi * : rax
A topic inditoban leirt fuggveny x86_64 asm kodja innentol annyi, h
mov $0xff00ff00ff00ff,%rax. Igy tok mindegy mit mire kellene castolni, attol meg minden esetben az elobbi asm kodra fog lefordulni a kod. Ha unsigned long lenne a fuggveny visszateresi ertekenek tipusa akkor is, ha long lenne, akkor is, ha int *, akkor is, ha void *, akkor is. A fuggveny visszateresi erteke 64 bites szamok eseten (ami lehet egy konstans, egy pointer, barmi) a rax-ban lesz megtalalhato, az ebben talalhato szam ertelmezese csak a kod tovabbi reszetol fugg. Ami viszont a fuggveny jo es normalis mukodese utan szepen a cltq-nak koszonhetoen ugy lett kezelve, mintha egy szimpla int lett volna a visszateresi ertek tipusa egy pointer helyett, teljesen fuggetlenul attol, h en ott egy allokalt memoriaterulet cimet vagy egy konstanst adok vissza.
---
pontscho / fresh!mindworkz