2010-08-10 3 views

Répondre

7

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.

+1

C'est un peu triste à quel point c'est plausible. – zwol

3

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.

+2

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

+0

Ce qui est stupide, parce que cet avertissement est là pour de bonnes raisons. –

+0

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

2

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?

+1

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

+2

@ 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

Questions connexes