dans le code source qemu, j'ai la macro suivante offsetof
. Quelqu'un peut-il me dire ce qu'il fait?Que fait la macro suivante?
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *) 0)->MEMBER)
Il est utilisé de cette manière:
offsetof(CPUState, icount_decr.u32)
où CPUState est un struct.
Je pense qu'il donne le décalage du membre à l'intérieur d'une structure, mais je ne suis pas sûr.
EDIT: Oui, j'ai découvert ce qui se passait. La définition de CPUState avait une macro à l'intérieur, que j'ai manquée, qui comprenait la variable icount_decr.
http://en.wikipedia.org/wiki/Offsetof –
La macro déclenche techniquement un comportement indéfini, mais arrive à travailler dans beaucoup d'endroits. Un moderne (par exemple GCC 4) '' le définira à un compilateur intrinsèque pour éviter l'indéfini et aussi des maux de tête C++. –
zwol
@Zack: Comme je l'ai dit sur une réponse, c'est une fonction de bibliothèque, donc non, ce n'est pas un comportement indéfini. Une implémentation est libre de l'implémenter comme bon lui semble. (Essentiellement, cette implémentation spécifique oblige à prendre l'adresse d'un pointeur nul déréférencé pour un compilateur particulier.) – GManNickG