VC7.1は実際に試して可能で
した。
特に意識せず使ってましたが
、
怒られた記憶もないので、
VC6やGCC、BCC等でも通る
と思います。
#逆に怒られるコンパイラを
知らないかも
VC6でも普通に通ります。
↑実際にやってみました。
> 最新のC言語では構造体も値返しできるのですか。
最新(C99)でなく、C89とかでも通るはずです。
>2006/01/10(火) 10:25:31
のPATIOさんご意見で、「ヒープ領域から取得する」というお話がありました。
僕が参考に示した、
Windows CE .NET の高度なメモリ管理
http://www.microsoft.com/japan/msdn/library/default.asp?
url=/japan/msdn/library/ja/jpdnce/htm/advmemmgmt.asp
に、Windows CEでのヒープメモリーの使い方が書かれています。
規模の大きな構造体は、ヒープからとることが出来ないのでしょうか。
構造体を、ポインターにして引数として渡してあげれば、その関数の中で値を書換え可能
だと思いますが、どうでしょうか。
わざわざ戻り値をしなくてもいいような気がします。
Ban様、PATIO様、ITO様、ご返信ありがとうございます。
特に、実際に戻り値が構造体の時の動作検証まで行っていただいた Ban様には
何とお礼を申し上げたらよいか・・。本当にありがとうございます。
自分も(戻り値が構造体)VC6で試してみましたが、
特に警告も表示されずに実行できました。
# PCのスタック域(1MB)は CE(58KB)と比較すると大きいとはいえ、
# 構造体分の大きさを消費していることには変わりありませんが・・。
一方で、ITO様のご指摘、仰るとおりです。
>【ミミ 2006/01/17(火) 00:51:34】
>この回避方法として、★1ではローカル変数(スタック)ではなく、メンバ変数(ヒープ)
>として確保し、Func1()、Func2()も MY_TABLE 型のポインタでやりとりしようと考えていま
す。
現在は、構造体を戻り値とする仕様をやめ、ヒープに予め確保した領域に対して
参照渡しでやりとりをするように修正いたしました。
これにより「無名の一時変数」によって無駄に消費していたスタック領域も、
抑える事ができました。
今後は、CEならではのスタックの制限について常に考え、開発を進めていこうと思っています。
>【ITO様 2006/01/14(土) 19:52:20】
ITO様の提示してくださいました2つのリンクのうちの「Windows CE .NET の高度なメモリ管
理」
ですが、今後時間をかけてじっくり読んでいこうと考えています。
今後も CEの開発(もとい、通常のPCにおいても)を行って行く限り、
絶対に必要な知識だと思っていますので・・。