C89 标准是否允许我将 void * 转换为 ptrdiff_t 以便我可以将内存位置打印为十六进制?
例如:
static const char *dig = "0123456789abcdef";
char buf[16], *ptr = buf; /* Need 16 bytes when sizeof(void *) == 8 */
void *val;
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() 函数。