time() is designed to either populate a struct passed via pointer, or return a newly-allocated struct if a NULL pointer is passed.
I suspect that time() was designed to take a struct pointer for memory and time efficiency: remember, C was defined when computers were vastly underpowered relative to even the weakest modern smartphone. If you had to call time() frequently, it was (presumably) more efficient to create one such memory block and use it over and again.
C doesn't have any mechanism for passing a different number of arguments, so if a function takes an argument, you've got to provide one. In this case, if the compiler permitted you to call time() without an argument, the variable that the argument ordinarily resides in would have garbage data, which time() would happily attempt to treat as a pointer and thus fill a random block of memory with time-related data.
(Edit: missed the fact there was an entire page of discussion after the time() question. So, ignore my now-mostly-irrelevant post if you wish.)