asctime.c
Martinez, Andres
Andres.Martinez at EagleGL.com
Tue Aug 3 15:04:41 UTC 2004
I need to unsubscribe to this email...
But there is no message at the bottom with instructions...
Can you help?
-----Original Message-----
From: Paul Eggert [mailto:eggert at penguin.cs.ucla.edu] On Behalf Of Paul
Eggert
Sent: Tuesday, August 03, 2004 10:02 AM
To: Clive D.W. Feather
Cc: tz at lecserver.nci.nih.gov
Subject: Re: asctime.c
"Clive D.W. Feather" <clive at demon.net> writes:
> Can you give me an example?
Sure. Here's an example taken from the code I happened to be looking at
30 seconds before reading your email. It's taken from GNU coreutils
"od.c". I've paraphrased the code slightly to simplify it.
enum size_spec { NO_SIZE, CHAR, SHORT, INT, LONG } ;
enum size_spec integral_type_size[sizeof (long) + 1];
for (i = 0; i <= MAX_INTEGRAL_TYPE_SIZE; i++)
integral_type_size[i] = NO_SIZE;
integral_type_size[sizeof (char)] = CHAR;
integral_type_size[sizeof (short)] = SHORT;
integral_type_size[sizeof (int)] = INT;
integral_type_size[sizeof (long)] = LONG;
This code has undefined behavior if, for example, sizeof (long) is 4 and
sizeof (int) is 8.
The code in difftime.c is a bit more subtle than this, and now that I
look at it more carefully it can't strictly be justified in terms of
either C89 or C99 (though it is true on all platforms I know about).
However, I'd say that the general principle that sizeof(int) <=
sizeof(long) is hardwired into a lot of real-world code.
If there aren't any real implementations with sizeof(long) <
sizeof(int), then this is only of academic interest. Still, it's
strange that this longstanding requirement would get removed from the
standard. After all, it's a natural assumption.
More information about the tz
mailing list