Является ли разница двух переменных невоичного указателя (на C99 и/или С++ 98), если они оба NULL
value?
Например, скажем, у меня есть структура буфера, которая выглядит так:
struct buf {
char *buf;
char *pwrite;
char *pread;
} ex;
Скажем, ex.buf
указывает на массив или некоторую память malloc'ed. Если мой код всегда гарантирует, что pwrite
и pread
указывают внутри этого массива или один за ним, я уверен, что ex.pwrite - ex.pread
всегда будет определен. Однако, если pwrite
и pread
равны нулю. Могу ли я просто ожидать, что вычитание двух определяется как (ptrdiff_t)0
или строго совместимый код должен проверить указатели на NULL? Обратите внимание, что единственный случай, который меня интересует, - это когда оба указателя имеют NULL (который представляет собой не инициализированный буфер). Причина связана с полностью совместимой "доступной" функцией, если выполняются предыдущие предположения:
size_t buf_avail(const struct s_buf *b)
{
return b->pwrite - b->pread;
}