Безопасно ли возвращать структуру в C или C++?

Я понимаю, что этого делать не следует, но я считаю, видел примеры, которые делают что-то подобное (примечание, код не обязательно синтаксически правильный, но идея есть)

typedef struct{
    int a,b;
}mystruct;

А вот еще функция

mystruct func(int c, int d){
    mystruct retval;
    retval.a = c;
    retval.b = d;
    return retval;
}

Я понял, что мы всегда должны возвращать указатель на mal loc'ed struct, если мы хотим сделать что-то подобное, но я уверен, что видел примеры, которые делают что-то подобное. Это правильно? Лично я всегда либо возвращаю указатель на структуру malloc, либо просто делаю проход по ссылке на функцию и изменяю там значения. (Потому что я понимаю, что как только область действия функции закончится, любой стек, который использовался для выделения структуры, может быть перезаписан).

Давайте добавим вторую часть вопроса: зависит ли это от компилятора? Если да, то как ведут себя последние версии компиляторов для десктопов: gcc, g++ и Visual Studio?

Мысли по этому поводу?

80
задан Jonathan Leffler 16 May 2015 в 07:31
поделиться