Maison >développement back-end >C++ >Les structures C peuvent-elles être lues et écrites en toute sécurité sur des plates-formes et des compilateurs ?
Question :
Est-il possible de lire/écrire en toute sécurité un Structure C dans un fichier d'une manière qui garantit multiplateforme et compilateur compatibilité ?
Réponse :
Non, ce n'est pas possible en raison du manque de standardisation au niveau binaire en C .
Selon Don Box , C manque de standardisation au niveau binaire, ce qui signifie que différents compilateurs peuvent implémenter le remplissage de structure différemment. Même au sein d'un même compilateur, l'alignement d'emballage des structures peut varier en fonction du pack pragma utilisé.
De plus, l'ordre des membres dans une structure peut affecter sa taille. Par exemple, les structures avec des membres identiques mais des ordres de déclaration différents peuvent avoir des tailles différentes.
Exemple :
struct A { char c; char d; int i; }; struct B { char c; int i; char d; };
La compilation du code ci-dessus avec gcc-4.3.4 produit :
8 12
Cela démontre que même si les deux structures ont les mêmes membres, leurs tailles diffèrent.
Conclusion :
La norme ne précise pas comment le remplissage doit être implémenté, le laissant à la discrétion des compilateurs. En conséquence, il est impossible de supposer que tous les compilateurs appliqueront les mêmes règles de remplissage, ce qui rend la compatibilité multiplateforme difficile à réaliser.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!