Hoje eu estava ensinando alguns amigos a usar C structs. Um deles perguntou se você pudesse voltar a structpartir de uma função, ao que eu respondi: "Não! Você iria retornar ponteiros para dinamicamente malloced struct. S em vez"
Vindo de alguém que faz principalmente C ++, eu esperava não conseguir retornar structs por valores. No C ++, você pode sobrecarregar os operator =objetos e faz todo sentido ter uma função para retornar seu objeto por valor. Em C, no entanto, você não tem essa opção e, por isso, me fez pensar no que o compilador está realmente fazendo. Considere o seguinte:
struct MyObj{
double x, y;
};
struct MyObj foo(){
struct MyObj a;
a.x = 10;
a.y = 10;
return a;
}
int main () {
struct MyObj a;
a = foo(); // This DOES work
struct b = a; // This does not work
return 0;
}
Entendo por struct b = a;que não deve funcionar - você não pode sobrecarregar operator =seu tipo de dados. Como é que a = foo();compila bem? Isso significa algo diferente struct b = a;? Talvez a pergunta a fazer seja: O que exatamente faz a returndeclaração em conjunto para =assinar?
[edit]: Ok, acabei de apontar que struct b = aé um erro de sintaxe - isso é correto e eu sou um idiota! Mas isso torna ainda mais complicado! Usar struct MyObj b = arealmente funciona! O que estou perdendo aqui?
struct MyObj b = a;parece funcionar :)
struct b = a;é um erro de sintaxe. E se você tentarstruct MyObj b = a;?