如果两个非空指针变量都是NULL
值,是否定义了它们的差异(根据C99和/或C++98)?
例如,假设我有一个如下所示的缓冲区 struct :
struct buf {
char *buf;
char *pwrite;
char *pread;
} ex;
比如说,ex.buf
个点指向一个数组或某个malloc'ed内存.如果我的代码总是确保pwrite
和pread
点在该数组中,或者超过它一点,那么我很有信心ex.pwrite - ex.pread
总是被定义的.然而,如果pwrite
和pread
都为空呢.我能期望减go 定义为(ptrdiff_t)0
的两个指针吗?还是严格兼容的代码需要测试指针是否为NULL?请注意,我唯一感兴趣的情况是both个指针为NULL(这表示缓冲区未初始化的情况).考虑到满足上述假设,原因与完全符合的"可用"功能有关:
size_t buf_avail(const struct s_buf *b)
{
return b->pwrite - b->pread;
}