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