Могу ли я преобразовать 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 () в пространстве ядра.

0 ответов

Другие вопросы по тегам