我读到了函数调用之间的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
值的生命周期?
答案 0 :(得分:6)
在C中,示例中临时的生命周期在printf
表达式结束时结束:
printf
表达式完成时结束。在C ++中,示例中的生命周期与C中的生命周期相同:
printf
表达式的最后一步而被销毁。答案 1 :(得分:2)
函数xprint
返回结构的副本,编译器将此副本存储在临时中,临时生命周期是printf
函数调用的持续时间。当printf
函数返回时,该临时对象将被销毁。