time_t printf()
Erik Trulsson
ertr1013 at student.uu.se
Sun Jan 8 02:52:26 PST 2006
On Sun, Jan 08, 2006 at 09:34:02PM +1100, Edwin Groothuis wrote:
> Trying to printf() a time_t value, I tried the following permutations:
>
> time_t days = 0, hours = 0, minutes = 0, seconds = 0;
> sprintf(buffer, "%2d %2u %2ld %2lu", days, hours, minutes, seconds);
>
> 4.11 said:
> misc.c:117: warning: int format, time_t arg (arg 3)
> misc.c:117: warning: unsigned int format, long unsigned int arg (arg 4)
>
> 6.0 said:
> misc.c:117: warning: long int format, time_t arg (arg 5)
> misc.c:117: warning: long unsigned int format, time_t arg (arg 6)
>
> So between 4.11 and 6.0 there is no uniform way to printf() time_t
> values...
Yes, there is. Cast the argument to [unsigned] long (or possibly
[u]intmax_t when using a C99 compiler) and print it as such. Should be
portable to all Unix-like systems.
If you try to make the code as portable as possible you should keep in mind
that the only requirement the C standard puts on time_t is that it must be
an arithmetic type, so some implementations may define it as a double or a
float.
--
<Insert your favourite quote here.>
Erik Trulsson
ertr1013 at student.uu.se
More information about the freebsd-ports
mailing list