Date: Tue, 10 Aug 2004 19:26:12 +0300 From: Giorgos Keramidas <keramida@ceid.upatras.gr> To: Mipam <mipam@ibb.net> Cc: freebsd-questions@freebsd.org Subject: Re: localtime question Message-ID: <20040810162612.GC25389@orion.daedalusnetworks.priv> In-Reply-To: <Pine.BSO.4.56.0408101646230.26666@ux11.ltcm.net> References: <Pine.BSO.4.56.0408101646230.26666@ux11.ltcm.net>
next in thread | previous in thread | raw e-mail | index | archive | help
On 2004-08-10 16:49, Mipam <mipam@ibb.net> wrote: > Hi, > > I tried to display the time from yesterday by this little program > > #include <stdio.h> > #include <sys/time.h> > > time_t tval; > > int main() > { > struct timeval tv; > struct timeval tv_current; > > if (gettimeofday(&tv_current, NULL) == -1) > err(1, "Could not get local time of day"); > > tv.tv_sec = tv_current.tv_sec-86400; > printf("%s\n", ctime(tv.tv_sec)); > } Note that it's a good idea to explicitly specify that main() does nothing to its argument with: int main(void) { ... } and that main() has to `return' some value that fits in an `int' as its definition says it should. > But at compilation it complains: > > tijd.c: In function `main': > tijd.c:15: warning: passing arg 1 of `ctime' makes pointer from integer without a cast > > What am i doing wrong? You're passing the "value" of tv.tv_sec in a function that expects a pointer to it. % man ctime char * ctime(const time_t *clock); The value you passed to ctime() is not an address of a constant time_t object but the value of the time_t object itself. The compiler detects that a conversion from an integral type to a pointer needs to take place and warns you about it. This is not a fatal error (c.f. the rationale of the ANSI C99 standard, which specifies that pointers might be converted to integral values and back to the same pointer type without losing any information). However, it is usually a very common mistake (forgetting to pass a reference to the object and passing the object itself). This is why you get warned. Try calling ctime() with the address of tv.tv_sec: printf("%s\n", ctime(&tv.tv_sec)); - Giorgos
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20040810162612.GC25389>