Après avoir vu What does the following macro do? Je dois poser ma propre question: pourquoi tant d'en-têtes d'applications définissent-elles offsetof
elles-mêmes? Y at-il une raison pour laquelle <stddef.h>
ne doit pas être invoqué?Pourquoi les gens définissent-ils leur propre offset?
Répondre
Je ne pense pas que c'est qu'ils se méfient de la norme offsetof
- au moins de ce que j'ai vu, c'est généralement qu'ils ne sont tout simplement pas au courant.
Y at-il une raison pour laquelle on ne peut pas compter sur?
Je connais l'une des raisons. GCC génère un avertissement lorsque offsetof() standard est utilisé sur les champs de classes C++. Cela amène certaines personnes à déployer leur propre version qui ne déclenche pas l'avertissement.
Terrible idée. Les avertissements sont là pour une raison ... C'est comme dire "Oh, un comportement indéfini? Je vous crache dessus ... au fait, pourquoi mon programme n'est-il pas portable et s'écrase?" – GManNickG
Ce qui est stupide, parce que cet avertissement est là pour de bonnes raisons. –
Oui. Spécialement sur l'un des projets que j'ai travaillé, ils mélangeaient le polymorphisme/héritage multiple et le offsetof() et il y avait de la corruption de mémoire à cause de ça et il m'a fallu une éternité pour expliquer pourquoi ça ne marchait pas et pourquoi il y avait un avertissement pour ça. – Dummy00001
Ou peut-être que c'est un code hérité d'un compilateur C qui n'était pas conforme ANSI et n'avait pas offsetof
?
Je le croirais sauf qu'il semble que tout ce code aurait dû disparaître maintenant. Peut-être que les gens les ont mis en relation depuis le début parce qu'ils ne connaissent pas stddef.h, comme le suggère Jerry. – zwol
@ Zack: Je crois facilement que les gens ont été la cargaison. Il y a beaucoup d'idées fausses selon lesquelles 'offsetof' n'était pas standardisé avant C99 aussi. – jamesdlin
C'est un peu triste à quel point c'est plausible. – zwol