Reputation: 2216
I'm currently writing a C function that return a time_t value but I need to manage error cases (because this function uses I/O functions) too. Is it correct to use (time_t) -1 as an error indicator?
Upvotes: 4
Views: 2022
Reputation: 70931
Yes, time_t
is signed.
So it perfectly ok to make the function return -1
to indicate an error.
Anyway, you should make sure, that from the logic of your API you never need to return any negative time differences, as time_t
is signed
to be able to express (also?) differences.
Update:
This is guaranteed on POSIX systems only. An even there signed
is in misleading, as http://pubs.opengroup.org/onlinepubs/009696699/basedefs/sys/types.h.html defines time_t
to be an int
or a real-floating type.
So on POSIX conforming systems time_t
is able to carry negative values.
Upvotes: 2
Reputation: 753870
The value (time_t)-1
indicates 1969-12-31T23:59:59+00:00, the second before The (Unix) Epoch.
It is returned by some of the Standard C time functions, which is a confounded nuisance if you might need to work with historical times and need to distinguish between an actual error and the occasional occurrence of the second before The Epoch. You'd do better with the (hypothetical) TIME_T_MAX or TIME_T_MIN values — the maximum or minimum possible value of time_t
. (But be aware that there's only 25 years or so left before the upper limit for a signed 32-bit time_t
occurs — in January 2038.)
Upvotes: 1
Reputation: 121971
Using (time_t)-1
is already used by time()
function to report a failure so does not seem an unreasonable choice:
Current calendar time encoded as time_t object on success, (time_t)(-1) on error. If the argument is not NULL, the return value is equal to the value stored in the object pointed to by the argument.
However, if it is necessary for the caller to differentiate between a time related failure or an IO related failure (or specific IO failures) you may consider adding a status type argument to your function that can be used to return additional information about the failure.
Upvotes: 3
Reputation: 58362
The time function itself returns (time_t) -1
on error, so using (time_t) -1
should work just fine.
Upvotes: 2