On Thu, Feb 20, 2003 at 06:32:19PM -0000, Stephen Kennedy wrote: > > OK, the C standard does not say that this should work, so you > can consider this bug closed. > > However, given knowledge of the calling convention of a > particular machine, you can do neat things such as dynamic > function binding. See www.drizzle.com/~scottb/gdc/fubi-paper.htm > for instance. > > I've since changed to using assembly, but why does gcc > return the address of a temp when 'a' is a char and not > when 'a' is an int?
Because it's passed as an int; you have to convert it to a char on arrival in the function. > > Surprised, not unhappy, > Stephen. > > --- > Stephen Kennedy <[EMAIL PROTECTED]> > t: +353 1 6693679 f: +353 1 6767094 > Game Developer Frontline Award Winner > http://www.havok.com/news/release.html > > > > In the example below, '&a' is the address of a local > > copy of 'a' not of 'a'. > > > if the type of 'a' is changed to int, it works as expected. > > > > Works as who expected? Where is the bug? Please quote which part of > > the C standard is violated. You got an address, why are you unhappy? > > > > Neil. > > > > > #define TA char > > > #define TB int > > > #define TC int > > > > > > void foobar(TA a, TB b, TC c); > > > > > > int main() > > > { > > > foobar(1,2,3); > > > return 0; > > > } > > > > > > void foobar(TA a, TB b, TC c) > > > { > > > printf("a == %i claims %x\n", a, &a); > > > printf("a == %i really %x\n", (&b)[-1], (&b)-1); > > > printf("b == %i %x\n", b, &b); > > > printf("c == %i %x\n", c, &c); > > > } > > > > > -- > To UNSUBSCRIBE, email to [EMAIL PROTECTED] > with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED] > > -- Daniel Jacobowitz MontaVista Software Debian GNU/Linux Developer