Macro de la bibliothèque C -offsetof()
Bibliothèque standard C - <stddef.h>
Description
Macro de la bibliothèque Coffsetof(type, member-designator)Générera un type qui estsize_tUne constante entière qui est le décalage en octets d'un membre de structure par rapport au début de la structure. Le membre est donné par member-designator, et le nom de la structure est donné dans type.
Déclaration
Ci-dessous se trouve la déclaration de la macro offsetof().
offsetof(type, member-designator)
Paramètre
- type-- Il s'agit d'un type de classe, où member-designator est un désignateur de membre valide.
- member-designator-- Il s'agit d'un désignateur de membre d'un type de classe.
Valeur de retour
Le type de retour de cette macro estsize_tLa valeur représente le décalage du membre dans type.
Exemple
L'exemple suivant montre l'utilisation de la macro offsetof().
Exemple
#include <stdio.h>
struct address {
char name[50];
char street[50];
int phone;
};
int main()
{
printf("offset of name in address structure = %d bytes.\n",
offsetof(struct address, name));
printf("offset of street in address structure = %d bytes.\n",
offsetof(struct address, street));
printf("décalage de phone dans la structure address = %d bytes."\n",
offsetof(struct address, phone));
return(0);
}
Compilons et exécutons le programme ci-dessus, ce qui produira le résultat suivant :
address 结构中的 name 偏移 = 0 字节。 address 结构中的 street 偏移 = 50 字节。 address 结构中的 phone 偏移 = 100 字节。
Notes
offsetofLes macros sont souvent utilisées pour implémenter des opérations mémoire de bas niveau ou pour écrire du code lié au matériel.- Utilisation
offsetofLa macro peut éviter le calcul manuel du décalage, réduisant ainsi la probabilité d'erreurs. - Le calcul du décalage dépend de l'alignement mémoire du compilateur, les résultats peuvent donc différer selon les compilateurs ou les plateformes.
scénarios d'application
- Implémenter un allocateur de mémoire personnalisé.
- Manipuler des registres matériels.
- Sérialiser et désérialiser des données de struct.
- Il est utilisé pour implémenter des structures de données avancées telles que les tables de décalage et les pools de mémoire.
en utilisantoffsetofLa macro facilite la gestion des décalages mémoire des membres de structure, ce qui améliore la maintenabilité et la portabilité du code.