Aujourd'hui , j'enseignais un couple d'amis comment utiliser C struct
s. L' un d'eux a demandé si vous pouviez revenir un struct
d'une fonction, à laquelle je répondis: « Non , vous avait renvoyer des pointeurs dynamiquement malloc
ed struct
s à la place. »
Venant de quelqu'un qui fait principalement du C ++, je m'attendais à ne pas pouvoir renvoyer struct
s 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 = a
une 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 = a
fonctionne 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;
?