QuickC
Leo de Wit
leo at philmds.UUCP
Sat Aug 27 08:32:37 AEST 1988
In article <8808261424.AA11504 at ucbvax.Berkeley.EDU> TURGUT at TREARN.BITNET (Turgut Kalfaoglu) writes:
|
|The other day, I was struggling with QuickC - a very simply problem,
|but really intriguing. Let me know if you can interpret this:
|
|main()
|{
| int a,v;
| a = 2;
| v = square(a);
| printf("%d\n",v);
|}
|
|square(num)
|int num;
|{
| num = num*num;
|}
|
|OK? There is no 'return' statement in the function. However, it works!
|I get '4' as an answer. So I thought maybe it was keeping the result
|of the last operation, so I added some dummy lines,
|
|square(num)
|int num;
|{
| int dummy;
| num = num*num;
| dummy=222;
|}
|
|but the call STILL works... Can anyone shed some light onto this?
|WHY does it work?
|-turgut
My guesses (I don't know QuickC, but I can understand why it would behave
like this):
In the first case:
The return value of a C function is typically returned in a register
(if it fits in one); often the compiler uses one and the same
register. Also for temporary values mostly a small set of registers is
used; if the temporary value num * num happens to be put into the same
register, the above behaviour is explained.
In the second case:
The '222' can be directly assigned (to dummy) so that no temporary is
needed; the num * num result is still in the 'temporaries' register.
Other possible explanation: if the compiler is really smart it could
see that dummy is assigned but never used and so optimized it away.
Leo.
More information about the Comp.lang.c
mailing list