2010-08-10 2 views

ответ

7

Я не думаю, что они не доверяют стандарту offsetof - по крайней мере, из того, что я видел, обычно они просто не знают об этом.

+1

Это грустно, насколько это правдоподобно. – zwol

3

Есть ли какая-то причина, почему нельзя полагаться?

Я знаю одну из причин. GCC выдает предупреждение, когда стандартное offsetof() используется в полях классов C++. Это заставляет некоторых людей развернуть свою версию, которая не вызывает предупреждения.

+2

Ужасная идея. Предупреждения есть по какой-то причине ... Это как сказать «О, неопределенное поведение? Я плюю на тебя ... кстати, почему моя программа не переносима и рушится?» – GManNickG

+0

Это глупо, потому что это предупреждение существует по уважительным причинам. –

+0

Да. В частности, в одном из проектов, которые я работал, они фактически смешивали полиморфизм/множественное наследование и offsetof(), и из-за этого происходило повреждение памяти, и мне потребовалось навсегда объяснить людям, почему он не может работать, и почему возникает предупреждение для этого. – Dummy00001

2

Возможно, это устаревший код от компилятора C, который не был совместим с ANSI и не имел offsetof?

+1

Я бы поверила в это, если бы не показалось, что весь этот код должен был умереть. Возможно, с тех пор люди обмениваются грузами друг с другом, потому что они не знают о stddef.h, как говорит Джерри. – zwol

+2

@ Zack: Я бы с легкостью поверил, что люди грузили его. Есть много неправильных представлений о том, что 'offsetof' не был стандартизирован до C99. – jamesdlin

Смежные вопросы