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


Reply via email to