質問です。↓って OK なんでしたっけ?ちゃんとスタックからスタックへコピーして返してくれてるのでしょうか?
そして移植性にも問題ないんでしょうか?(VC6とBC5ではちゃんとコンパイルできました)

#include <stdio.h>

struct A
{
int elem1;
int elem2;
int elem3;
};

A func()
{
A a;
a.elem1 = 0;
a.elem2 = 1;
a.elem3 = 2;

return a;
}

void main(void)
{
A a;

a = func();

printf("%d %d %d", a.elem1, a.elem2, a.elem3);
}