我了解了函数调用之间的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
value(上例中的
struct
),以及如何正确访问它们? return
值的生存期? 最佳答案
在C语言中,当printf
表达式完成时,示例中的临时项的生存期结束:
printf
表达式完成时结束。 在C++中,示例中的生存期与C中相同:
printf
表达式的最后一步而被销毁。 关于c - 函数返回值的生存期是多少?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17902045/