Question

Même si je suis depuis longtemps programmeur C, je ne ai appris récemment que l'on peut assigner directement les variables de la structure à l'autre au lieu d'utiliser memcpy:

struct MyStruct a,b;
...
a = b; /* implicit memcpy */

Bien que cela se sent un peu « haut niveau » C, il est certainement utile. Mais pourquoi je ne peux pas faire la comparaison de l'égalité et de l'inégalité:

if (a == b) ...
if (a != b) ...

Y at-il une bonne raison de la norme pour exclure ce? Ou est-ce une incohérence dans la - par ailleurs très élégant - norme?

Je ne vois pas pourquoi je peux remplacer mes memcpy pour des missions de nettoyage, mais je dois garder ceux de laide de memcmp en place.

Était-ce utile?

La solution

Par la comp.lang.c FAQ :

  

Il n'y a pas de bonne façon pour un compilateur   pour mettre en oeuvre la comparaison de la structure   (Par exemple pour supporter l'opérateur == pour   structures) qui est compatible avec   saveur faible niveau C. Un simple   octet par octet comparaison pourrait fondateur   sur des bits aléatoires présents dans inutilisés   « trous » dans la structure (par ex   rembourrage est utilisé pour maintenir l'alignement   des champs plus tard correct). Une comparaison champ par champ peut nécessiter des quantités inacceptables de   le code répétitif pour les grandes structures.   Toute comparaison généré par le compilateur   ne pouvait pas être prévu pour comparer   champs de pointeur de manière appropriée dans tous les   cas: par exemple, il est souvent   approprié de comparer les champs char * correspond   avec strcmp plutôt que ==.

     

Si vous avez besoin de comparer deux structures,   vous devrez écrire votre propre fonction   de le faire, champ par champ.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top