Я прочитал о 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
значения функции (массив изstruct
в приведенном выше примере), и как правильно обращаться к ним?Где заканчивается срок службы значения
return
?
Возвращаемое значение является временным. Он отбрасывается после его использования. Если вы не храните его в переменной, она исчезнет после того, как вы впервые ссылаетесь на нее. –
@JoachimPileborg Да, я получил его, а затем удалил свой комментарий перед вашим комментарием. :) –
@boleto Почему вы смущены? Вы ожидали чего-то еще? – Xaqq