我只是最近才瞭解到,我實際上可以在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
,因此堆棧上的空間必須爲此分配和保留,但該分配的生命週期是多少?我可以信任它多久才能繼續分配?
看看海灣合作委員會的彙編輸出,我觀察到如果我把getpeername
的調用放到一個循環中,那麼分配不會在循環的多次迭代中存活,那麼其他什麼條件可能會導致它停止存在?
對於結構:http://stackoverflow.com/questions/21882564/what-is-the-lifetime-of-compound-literals-passed-as-arguments/31178926#31178926 – 2015-07-02 08:08:36