On 3 Apr 2013, at 19:38, Richard Sanders wrote:

> When I first compiled with 64 bit linux the compiler complained about 
> int i = (int)(v);
> but was happy with 
> long i = (long)(v);

Greg's suggestion of using fl_intptr_t seems like the most portable option, 
should work *everywhere* I think!

> Both Linux and mingw 32 bit are happy with the change to long from
> int.
> Mingw64 is another fish. AFAIK pointers in win64 are 64 bit pointers
> and the compiler issues errors. The work around for that is to use the
> compiler switch "fpermissive", then only warnings are issued.

The *nix's (and VxWorks, others...) went from being ILP32, to being LP64, so in 
both those cases sizeof(long) == sizeof(ptr), but in the 64 bit cases 
sizeof(int) != sizeof(ptr).

However, in an attempt to preserve as much as possible of their API, MS decided 
to go from ILP32 to LLP64/IL32, so that in Win64 code sizeof(long) != 
sizeof(ptr), you need to use sizeof(long long) == sizeof(ptr)

Or... use intptr_t, since sizeof(intptr_t) == sizeof(ptr) everywhere...

And of course sizeof(fl_intptr_t) == sizeof(ptr) everywhere too!

> Now in all cases long works so the same code covers all bets.

Still think fl_intptr_t is the more portable solution long term.

> Don't know about macs though.

A Mac is just a *nix box these days... 

fltk mailing list

Reply via email to