我最近才了解到在C语言中,我可以使用复合字面数组的引用,发现这很有用,但我不太明白它是如何工作的。
例如,假设我使用该功能来避免为某个套接字接口函数调用声明变量,而我并不关心返回名称的长度,就像这样:
int sockfamily(int fd)
{
struct sockaddr_storage ss;
getpeername(fd, (struct sockaddr *)&ss, (socklen_t [1]){sizeof(ss)});
return(ss.ss_family);
}
显然,为了将指向它的指针传递给
getpeername
,sizeof(ss)
实际上需要存储在堆栈中,并且必须为此目的分配和保留堆栈上的空间,但是这个分配的生命周期是多久?我能信任它保持分配的时间有多长?查看GCC的汇编输出,如果我将对
getpeername
的调用放在循环中,分配不会在循环的多次迭代中幸存,但是还有什么其他条件可能导致它停止存在呢?