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 ?

Les structures C peuvent-elles être lues et écrites en toute sécurité sur des plates-formes et des compilateurs ?

Mary-Kate Olsen
Libérer: 2024-12-20 13:17:22
original
531 Les gens l'ont consulté

Can C   Structs Be Safely Read and Written Across Platforms and Compilers?

Lecture/écriture multiplateforme de C Structs

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;
};
Copier après la connexion

La compilation du code ci-dessus avec gcc-4.3.4 produit :

8
12
Copier après la connexion

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal