Hoy les estaba enseñando a un par de amigos cómo usar C structs. Uno de ellos preguntó si podía devolver un structde una función, a lo que respondí: "¡No! En su lugar, devolvería los punteros a malloced dinámicamente struct".
Viniendo de alguien que principalmente hace C ++, esperaba no poder devolver structs por valores. En C ++ puede sobrecargar los operator =objetos y tiene mucho sentido tener una función para devolver su objeto por valor. En C, sin embargo, no tienes esa opción, por lo que me hizo pensar qué está haciendo realmente el compilador. Considera lo siguiente:
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;
}
Entiendo por struct b = a;qué no debería funcionar: no puede sobrecargar operator =su tipo de datos. ¿Cómo es que se a = foo();compila bien? ¿Significa algo más que struct b = a;? Tal vez la pregunta que returndebe =hacerse es: ¿Qué hace exactamente la declaración en conjunto para firmar?
[editar]: Ok, me acaban de señalar que struct b = aes un error de sintaxis, ¡eso es correcto y soy un idiota! ¡Pero eso lo hace aún más complicado! ¡Usar struct MyObj b = así funciona! ¿Que me estoy perdiendo aqui?
struct MyObj b = a;parece funcionar :)
struct b = a;es un error de sintaxis ¿Y si lo intentasstruct MyObj b = a;?