[ragel-users] Debugging colm for win32.

Bob Paddock graceindustries at gmail.com
Tue Apr 1 20:20:11 UTC 2014


> This isn't true in C. In C the only well-defined way to convert a pointer to
> an integer and back again is via intptr_t or uintptr_t.
>
> Does C++ really require the same behavior for size_t?

cstdint.hpp from Boost, which is what I have at hand says:

// intptr_t/uintptr_t are defined separately because they are optional
and not universally available

size_t and relatives should always be available unless using compilers
that are not compliant to standards and don't come with stdint.h .

Alas pointers are mine fields due to the varying widths, such as this
from the C99 Standard:

              /*
               * You may not even convert a void * to a function
               * pointer by explicit casting (6.3.2.3|1).
               *
               * C's abstract machine does not assume that code and
               * data are addressed the same way, so as far as C is
               * concerned function pointers and data pointers have
               * nothing to do with each other (they could have
               * different widths).
               */
Which can lead to the sickening mess of pointer decoration that has no
standard between compilers.

The bottom line is it is always wrong to use (long) long as a pointer
type.  What to use in its place depends on the tools being used.

_______________________________________________
ragel-users mailing list
ragel-users at complang.org
http://www.complang.org/mailman/listinfo/ragel-users



More information about the ragel-users mailing list