[ILUG] C compilation error
Niall O Broin
niall at linux.ie
Sat Jan 26 21:27:48 GMT 2002
OK - this tiny program
---------------------
#include <sys/time.h>
main() {
struct tm *tp;
tp = localtime();
tp->tm_isdst;
}
---------------------
generates the following wrning and error
timeq.c: In function main':
timeq.c:8: warning: assignment makes pointer from integer without a cast
timeq.c:9: dereferencing pointer to incomplete type
when compiled on a SuSE 7.3 box with gcc 2.95.3 and glibc 2.2.4
It compiles with no warning or error on a SuSE 6.4 box with gcc 2.95.2 and
libc 2.1.3 (yes, libc, not glibc - seems like a strange libc version number
to me)
While I'm no C whizkid, nor am I C illiterate and I just don't understand
these errors. I have
struct tm *tp;
and according to TFM
struct tm *localtime(const time_t *timep);
so why is my code generating the warning in line 8 ?
And what on earth is an "incomplete type" in line 9 ?
I've had a quick diff of time.h on both boxes and there are big differences
BUT the definition of a struct tm looks about the same AND the relevant bit
of TFM about localtime is the same on each box.
I can get rid of the warning by putting the cast in line 8 as
tp = (struct tm *)localtime();
but why on earth should I have to when localtime IS already a pointer to a
tm struct ? And it still leaves the "incomplete type" error in line 9.
I just tried on a couple of RH boxes I have access to - 6.2 bitches about
too few arguments to localtime but if I remove the localtime call it
compiles so it doesn't seem to regard the struct tm as an incomplete type.
That has egcs-2.91.66 and glibc-2.1.3.
On a Verio box, which claims to be "Verio Enterprise Linux, based on Redhat
Linux 6 & 7", I get the same errors as on SuSE 7.3. That has gcc 2.95.3 and
glibc-2.2.4.
Can some C whizkid please put me out of my misery ?
Niall
More information about the ILUG
mailing list