* C calling conventions: how to pass a struct parameter?
@ 2004-04-22 17:01 Cezar Harabula
2004-04-22 17:57 ` Eljay Love-Jensen
0 siblings, 1 reply; 4+ messages in thread
From: Cezar Harabula @ 2004-04-22 17:01 UTC (permalink / raw)
To: gcc-help, gcc-help-info
I simply cannot find this information! I have a procedure that must
receive a struct. How to pass a structure parameter from a caller to my
procedure, if the processor is an x86?
In C++: how to pass an object?
Thank you.
Cezar
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: C calling conventions: how to pass a struct parameter?
2004-04-22 17:01 C calling conventions: how to pass a struct parameter? Cezar Harabula
@ 2004-04-22 17:57 ` Eljay Love-Jensen
2004-04-23 7:38 ` Cezar Harabula
0 siblings, 1 reply; 4+ messages in thread
From: Eljay Love-Jensen @ 2004-04-22 17:57 UTC (permalink / raw)
To: Cezar Harabula, gcc-help, gcc-help-info
Hi Cezar,
(Hey, "Cezar", cool name.)
This should work:
struct Foo { int a,b,c; };
void PrintFoo(struct Foo foo)
{
printf("Foo:%d,%d,%d\n", foo.a, foo.b, foo.c);
}
That's a pass-by-value.
Here's pass-by-pointer:
void PrintFoo(struct Foo* foo)
{
printf("Foo:%d,%d,%d\n", foo->a, foo->b, foo->c);
}
Here's pass-by-reference (C++ only):
void PrintFoo(Foo const& foo)
{
printf("Foo:%d,%d,%d\n", foo.a, foo.b, foo.c);
}
Or am I misunderstanding your question? Such as "what is the memory layout
on the stack of the structure?", which depends on the aforementioned
pass-by-???? method employed.
HTH,
--Eljay
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: C calling conventions: how to pass a struct parameter?
2004-04-22 17:57 ` Eljay Love-Jensen
@ 2004-04-23 7:38 ` Cezar Harabula
2004-04-24 2:20 ` Ian Lance Taylor
0 siblings, 1 reply; 4+ messages in thread
From: Cezar Harabula @ 2004-04-23 7:38 UTC (permalink / raw)
To: Eljay Love-Jensen; +Cc: gcc-help, gcc-help-info
Thank you for your answers. Unfortunately, I was not clear enough. I
want to know what happens in the registers and in the stack when a
procedure like
void PrintFoo(struct Foo foo)
is called. There is no universal C calling convention set for x86, so I
am interested in how GCC usually does.
What about a struct return value:
struct bar Function() ?
Thanks.
Cezar
Eljay Love-Jensen wrote:
> Hi Cezar,
>
> (Hey, "Cezar", cool name.)
>
> This should work:
>
> struct Foo { int a,b,c; };
>
> void PrintFoo(struct Foo foo)
> {
> printf("Foo:%d,%d,%d\n", foo.a, foo.b, foo.c);
> }
>
> That's a pass-by-value.
>
> Here's pass-by-pointer:
>
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: C calling conventions: how to pass a struct parameter?
2004-04-23 7:38 ` Cezar Harabula
@ 2004-04-24 2:20 ` Ian Lance Taylor
0 siblings, 0 replies; 4+ messages in thread
From: Ian Lance Taylor @ 2004-04-24 2:20 UTC (permalink / raw)
To: Cezar Harabula; +Cc: gcc-help
Cezar Harabula <cezar.harabula@open-plug.com> writes:
> Thank you for your answers. Unfortunately, I was not clear enough. I
> want to know what happens in the registers and in the stack when a
> procedure like
>
> void PrintFoo(struct Foo foo)
>
> is called. There is no universal C calling convention set for x86, so
> I am interested in how GCC usually does.
>
> What about a struct return value:
> struct bar Function() ?
The easy way to find out is to write some code and look at the result
when it is compiled using -S. The results will change if you use the
-mregparm option.
Structures are normally passed by pushing the value of the structure
on the stack.
Structures are normally returned by arranging for the caller to pass
the address of a memory area as a hidden first argument. The function
then stores the return value into that memory area.
Ian
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2004-04-24 2:20 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2004-04-22 17:01 C calling conventions: how to pass a struct parameter? Cezar Harabula
2004-04-22 17:57 ` Eljay Love-Jensen
2004-04-23 7:38 ` Cezar Harabula
2004-04-24 2:20 ` Ian Lance Taylor
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).