Jaki jest czas życia wartości zwracanej przez funkcję?

Czytałem oreturn wartości między wywołaniami funkcji,
i eksperymentował z następującym fragmentem kodu:

/* 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;
}

Kod jest kompilowany bez błędów i ostrzeżeń.
Przetestowany zGCC 4.4.3 (Ubuntu 4.4.3-4ubuntu5.1) iVisual C ++ kompilatory.

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

Wyjście:
Dzień dobry !

Jestem trochę zdezorientowany wynikiem.
Kod jest napisany poprawnie?

Moje pytanie :

Jaka jest widoczność funkcjireturn wartość (tablica z astruct w powyższym przykładzie) i jak prawidłowo uzyskać do nich dostęp?

Gdzie kończy się czas życiareturn wartość?

questionAnswers(2)

yourAnswerToTheQuestion