Я только недавно узнал, что могу фактически использовать ссылки на сложные массивы литералов в 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
в цикле, распределение не сохранится для нескольких итераций цикла, но какие другие условия могут привести к его прекращению существовать?
Для структуры: http://stackoverflow.com/questions/21882564/what-is-the-lifetime-of-compound-literals-passed-as-arguments/31178926#31178926 –