Зверніть увагу, що більшість відповідей тут не є портативними, оскільки сьогодні компілятори оцінять ці відповіді за час компіляції (залежить від оптимізації) та повернуть конкретне значення, виходячи з конкретної витримки, тоді як фактична машинна небезпека може відрізнятися. Значення, на які тестується ендіантність, ніколи не дотягнуться до системної пам’яті, таким чином реальний виконаний код поверне той же результат незалежно від фактичної витримки.
Для прикладу , в ARM Cortex-M3 впроваджена порядок байт буде відображати в бітовому статус AIRCR.ENDIANNESS і компілятор не може знати це значення під час компіляції.
Вибір компіляції для деяких відповідей, запропонованих тут:
https://godbolt.org/z/GJGNE2 для цієї відповіді,
https://godbolt.org/z/Yv-pyJ для цього відповіді тощо.
Для її вирішення вам потрібно буде використовувати volatile
класифікатор. Yogeesh H T
«S відповідь ближче всього один для сьогоднішнього реального використання життя, але так як Christoph
передбачає більш комплексне рішення, невелике виправлення до його відповіді буде зробити відповідь повним, просто додайте volatile
до оголошення союзу: static const volatile union
.
Це гарантувало б збереження та читання з пам'яті, яке потрібно для визначення витривалості.