Hoje eu estava ensinando alguns amigos a usar C struct
s. Um deles perguntou se você pudesse voltar a struct
partir de uma função, ao que eu respondi: "Não! Você iria retornar ponteiros para dinamicamente malloc
ed struct
. S em vez"
Vindo de alguém que faz principalmente C ++, eu esperava não conseguir retornar struct
s 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 return
declaraçã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 = a
realmente 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;
?