6

return関数呼び出し間の値について読み
、次のコード スニペットを試しました。

/* file structaddr.c */
#include <stdio.h>    
#define MSIZE 10

struct simple
{   
    char c_str[MSIZE];
};
struct simple xprint(void)
{
    struct simple ret = { "Morning !" };
    return ret;
}
int main(void)
{   
    printf("Good %s\n", xprint().c_str);    
    return 0;
}

コードはエラーや警告なしでコンパイルされます。GCC 4.4.3 (Ubuntu 4.4.3-4ubuntu5.1)およびVisual C++コンパイラ
でテスト済み。

 gcc -m32 -std=c99 -Wall -o test  structaddr.c  
 cl -W3 -Zi -GS -TC -Fetest structaddr.c

出力:
おはようございます!

私は結果に少し混乱しています。
コードは正しく書かれていますか?

私の質問 :

  • 関数return値 (上記の例の a の配列 struct) の可視性と、それらに適切にアクセスする方法は何ですか?

  • 値の存続期間はどこで終了しreturnますか?

4

2 に答える 2

2

関数xprintは構造体のコピーを返し、コンパイラはこのコピーを一時的に格納します。一時的な有効期間はprintf関数呼び出しの期間です。関数がprintf戻ると、その一時オブジェクトは破棄されます。

于 2013-07-27T20:28:42.010 に答える