Определена ли разница между двумя переменными указателя, не имеющими значения void (для C99 и / или C ++ 98), если они обе Значение NULL
?
Например, у меня есть структура буфера, которая выглядит так:
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;
}