Aujourd'hui , j'enseignais un couple d'amis comment utiliser C structs. L' un d'eux a demandé si vous pouviez revenir un structd'une fonction, à laquelle je répondis: « Non , vous avait renvoyer des pointeurs dynamiquement malloced structs à la place. »
Venant de quelqu'un qui fait principalement du C ++, je m'attendais à ne pas pouvoir renvoyer structs par valeurs. En C ++, vous pouvez surcharger le operator =pour vos objets et il est tout à fait logique d'avoir une fonction pour renvoyer votre objet par valeur. En C, cependant, vous n'avez pas cette option et cela m'a donc fait réfléchir à ce que fait réellement le compilateur. Considérer ce qui suit:
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;
}
Je comprends pourquoi struct b = a;ne devrait pas fonctionner - vous ne pouvez pas surcharger operator =pour votre type de données. Comment ça a = foo();compile bien? Cela signifie-t-il autre chose que struct b = a;? Peut-être que la question à se poser est la suivante: que fait exactement l' returnénoncé associé au =signe?
[modifier]: Ok, on m'a juste signalé struct b = aune erreur de syntaxe - c'est correct et je suis un idiot! Mais cela rend les choses encore plus compliquées! L'utilisation struct MyObj b = afonctionne en effet! Qu'est-ce que j'oublie ici?
struct MyObj b = a;semble fonctionner :)
struct b = a;est une erreur de syntaxe. Et si vous essayezstruct MyObj b = a;?