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;
}