Date: Tue, 10 Aug 2004 18:45:19 +0200 (MEST) From: Mipam <mipam@ibb.net> To: Giorgos Keramidas <keramida@ceid.upatras.gr> Cc: freebsd-questions@freebsd.org Subject: Re: localtime question Message-ID: <Pine.BSO.4.56.0408101842210.21307@ux11.ltcm.net> In-Reply-To: <20040810162612.GC25389@orion.daedalusnetworks.priv> References: <Pine.BSO.4.56.0408101646230.26666@ux11.ltcm.net> <20040810162612.GC25389@orion.daedalusnetworks.priv>
next in thread | previous in thread | raw e-mail | index | archive | help
> 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)); #include <stdio.h> #include <sys/time.h> int main(void) { 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)); return 0; } Does the job, thanks! At compile time i get: tijd.c: In function `main': tijd.c:11: warning: passing arg 1 of `ctime' from incompatible pointer type But it works: Mon Aug 9 18:44:04 2004 nicely the time of yesterday. Only thing left is another format like: 2004 Aug 9 18:44:04 Any hints? Bye, Mipam.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSO.4.56.0408101842210.21307>