是否定义了两个非void指针变量(根据C99和/或C++ 98)的差异NULL
?
例如,假设我有一个如下所示的缓冲区结构:
struct buf {
char *buf;
char *pwrite;
char *pread;
} ex;
Run Code Online (Sandbox Code Playgroud)
比如说,ex.buf
指向一个数组或一些malloc的内存.如果我的代码始终保证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;
}
Run Code Online (Sandbox Code Playgroud)