Могу ли я преобразовать void * в ptrdiff_t в C89?
Позволит ли стандарт C89 преобразовать void * в ptrdiff_t, чтобы я мог распечатать адрес памяти как шестнадцатеричный?
Например:
static const char *dig = "0123456789abcdef";
char buf[16], *ptr = buf; /* Need 16 bytes when sizeof(void *) == 8 */
void *val = (void *) 0xdeadbeef;
ptrdiff_t tmp = (const unsigned char *) val - (const unsigned char *) 0;
do {
*buf++ = dig[tmp & 0xf];
tmp >>= 4;
} while (tmp);
do {
putc(*--ptr);
} while (ptr > buf);
Контекст: я пишу функцию printf () в пространстве ядра.