On Friday 22 June 2007 18:29:34 David A. Wheeler wrote:
> If you call a function that hasn't
> been defined, C assumes that it takes an int, and returns an int, no matter
> what it REALLY does.

<nitpick>
Actually, C assumes it takes all varargs and returns an int.  int blah(...);
(see "man 3 va_arg".)
</nitpick>

Way back when (before the Ansi C 89 standard) there were no function 
prototypes, so every function was expected to do the above.  This works for a 
surprising number of things because on a 32-bit platform, any pointer can be 
cast to an int and back so things that return pointers work if you return 
ints.  Basically there was a register in which to expect the return value.

On a 64-bit platforms this doesn't work, because it would have to default to 
long to hold a pointer and everybody just says "prototype the darn thing 
already".  But then 64 bit platforms are a relatively recent invention (the 
DEC Alpha was around 1993 I think).  The standards for them are even more 
recent...

Rob
-- 
"One of my most productive days was throwing away 1000 lines of code."
  - Ken Thompson.


_______________________________________________
Tinycc-devel mailing list
[email protected]
http://lists.nongnu.org/mailman/listinfo/tinycc-devel

Reply via email to