Versões anteriores de C não tinham inteiros sem sinal. (Alguns programadores usavam ponteiros quando precisavam de aritmética não assinada.) Não sei o que veio primeiro, a função time()
ou tipos não assinados, mas suspeito que a representação tenha sido estabelecida antes que tipos não assinados estivessem disponíveis universalmente. E 2038 estava longe o suficiente no futuro que provavelmente não valeria a pena se preocupar. Eu duvido que muitas pessoas pensem que o Unix ainda existirá até então.
Outra vantagem de um time_t
assinado é que estendê-lo para 64 bits (o que já está acontecendo em alguns sistemas) permite representar tempos centenas de bilhões de anos no futuro sem perder a capacidade de representar tempos anteriores a 1970. (Isso Por que eu me oponho a mudar para um unsigned de 32 bits time_t
; nós temos tempo suficiente para fazer a transição para 64 bits.)