comportamento de subtrair dois ponteiros NULL é definid

É a diferença de duas variáveis de ponteiro não nulas definidas (por C99 e / ou C ++ 98) se ambas sãoNULL valorizado?

or exemplo, digamos que eu tenha uma estrutura de buffer semelhante a est

struct buf {
  char *buf;
  char *pwrite;
  char *pread;
} ex;

Say,ex.buf aponta para uma matriz ou alguma memória com malloc'ed. Se meu código sempre garantir quepwrite epread ponto dentro dessa matriz ou um passado, então estou bastante confiante de queex.pwrite - ex.pread sempre será definido. No entanto, e sepwrite epread são NULL. Posso apenas subtrair os dois é definido como(ptrdiff_t)0 ou o código estritamente compatível precisa testar os ponteiros para NULL? Observe que o único caso em que estou interessado é quandoambo ponteiros são NULL (o que representa um buffer não inicializado). O motivo está relacionado a uma função "disponível" totalmente compatível, considerando as suposições anteriores:

size_t buf_avail(const struct s_buf *b)
{     
    return b->pwrite - b->pread;
}

questionAnswers(4)

yourAnswerToTheQuestion