【发布时间】:2013-02-19 10:28:22
【问题描述】:
我最近才知道我实际上可以在 C 中使用对复合文字数组的引用,我觉得这很有用,但我不太明白它是如何工作的。
例如,假设我使用该功能来避免必须为调用某个我不关心返回名称长度的套接字接口函数声明一个变量,如下所示:
int sockfamily(int fd)
{
struct sockaddr_storage ss;
getpeername(fd, (struct sockaddr *)&ss, (socklen_t [1]){sizeof(ss)});
return(ss.ss_family);
}
显然,sizeof(ss) 需要实际存储在堆栈中,以便将指向它的指针传递给 getpeername,因此必须为此目的分配和保留堆栈上的空间,但什么是这个分配的生命周期?我可以相信它会保持分配状态多久?
查看 GCC 的汇编输出,我观察到如果我将调用 getpeername 放在一个循环中,分配不会在循环的多次迭代中继续存在,但是还有什么其他条件可能会导致它不复存在了?
【问题讨论】:
标签: c compound-literals