Только что видел What does the following macro do? Я должен задать свой собственный вопрос: почему так много заголовков приложений определяют сами offsetof
? Есть ли причина, почему <stddef.h>
не следует полагаться?Почему люди определяют собственное смещение?
ответ
Я не думаю, что они не доверяют стандарту offsetof
- по крайней мере, из того, что я видел, обычно они просто не знают об этом.
Есть ли какая-то причина, почему нельзя полагаться?
Я знаю одну из причин. GCC выдает предупреждение, когда стандартное offsetof() используется в полях классов C++. Это заставляет некоторых людей развернуть свою версию, которая не вызывает предупреждения.
Ужасная идея. Предупреждения есть по какой-то причине ... Это как сказать «О, неопределенное поведение? Я плюю на тебя ... кстати, почему моя программа не переносима и рушится?» – GManNickG
Это глупо, потому что это предупреждение существует по уважительным причинам. –
Да. В частности, в одном из проектов, которые я работал, они фактически смешивали полиморфизм/множественное наследование и offsetof(), и из-за этого происходило повреждение памяти, и мне потребовалось навсегда объяснить людям, почему он не может работать, и почему возникает предупреждение для этого. – Dummy00001
Возможно, это устаревший код от компилятора C, который не был совместим с ANSI и не имел offsetof
?
Я бы поверила в это, если бы не показалось, что весь этот код должен был умереть. Возможно, с тех пор люди обмениваются грузами друг с другом, потому что они не знают о stddef.h, как говорит Джерри. – zwol
@ Zack: Я бы с легкостью поверил, что люди грузили его. Есть много неправильных представлений о том, что 'offsetof' не был стандартизирован до C99. – jamesdlin
- 1. Почему люди определяют тип данных в php?
- 2. Почему люди используют textmate?
- 3. Почему люди используют JSP?
- 4. Почему люди используют ProjectData
- 5. Почему люди определяют класс, свойство, объект внутри другого объекта в Scala?
- 6. Почему люди используют `Module.send (: prepend, ...)`?
- 7. pixel.gif, почему люди используют его?
- 8. Почему люди используют CommandManager.InvalidateRequerySposed() для ICommands?
- 9. Почему люди следуют другой подход для определения функции в JavaScript
- 10. переменная класса класса C++, зная ее собственное смещение
- 11. Почему некоторые люди объявляют функции extern внутри одной функции?
- 12. Почему смещение формы выбирается?
- 13. почему смещение и предел
- 14. Почему GDT и IDT лучше не определяют?
- 15. Почему примеры gen_server всегда определяют макрос SERVER?
- 16. Почему рельсы создают и не определяют выбор?
- 17. Почему скрипты определяют общие команды в переменных?
- 18. Почему люди используют комментарии как бизнес-логику
- 19. Почему люди используют .net для веб-разработки
- 20. Почему люди используют несколько идентификаторов в CSS?
- 21. Pthread: Почему люди пытаются использовать pthread_exit?
- 22. Почему люди добавляют ссылку на XLA динамически?
- 23. Почему люди не используют обмены xor?
- 24. Почему люди все еще создают RSS-каналы?
- 25. Почему люди защищают синтаксис регулярных выражений?
- 26. Почему люди называют jQuery $ alias «фабрикой»?
- 27. Почему люди используют командную строку вместо IDE?
- 28. Почему люди не используют тетраэдры для небоскребов?
- 29. Почему люди создают virtualenv в контейнере докеров?
- 30. Почему люди scala не любят аннотации?
Это грустно, насколько это правдоподобно. – zwol