如果两个非空指针变量都是 NULL
值,是否定义了它们之间的差异(每 C99和/或 C + + 98) ?
例如,假设我有一个这样的缓冲结构:
struct buf {
char *buf;
char *pwrite;
char *pread;
} ex;
比如说,ex.buf
指向一个数组或某个错误定位的内存。如果我的代码总是确保 pwrite
和 pread
点在该数组内或一个过去它,那么我相当有信心,ex.pwrite - ex.pread
将总是被定义。但是,如果 pwrite
和 pread
都是 NULL,情况会怎样。我是否可以期望减去这两个定义为 (ptrdiff_t)0
或者严格遵从的代码需要测试指针是否为 NULL?注意,我唯一感兴趣的情况是 都有指针为 NULL (表示缓冲区未初始化的情况)。考虑到前面的假设已经得到满足,这与一个完全符合要求的“可用”功能有关:
size_t buf_avail(const struct s_buf *b)
{
return b->pwrite - b->pread;
}