Preste atención a que la mayoría de las respuestas aquí no son portátiles, ya que los compiladores de hoy evaluarán esas respuestas en tiempo de compilación (depende de la optimización) y devolverán un valor específico basado en una endianidad específica, mientras que la endianidad real de la máquina puede diferir. Los valores en los que se prueba el endianness nunca llegarán a la memoria del sistema, por lo que el código ejecutado real devolverá el mismo resultado independientemente del endianness real.
Por ejemplo , en ARM Cortex-M3 la endianidad implementada se reflejará en un bit de estado AIRCR.ENDIANNESS y el compilador no puede conocer este valor en tiempo de compilación.
Salida de compilación para algunas de las respuestas sugeridas aquí:
https://godbolt.org/z/GJGNE2 para esta respuesta,
https://godbolt.org/z/Yv-pyJ para esto respuesta, y así sucesivamente.
Para resolverlo, necesitará usar el volatile
calificador. Yogeesh H T
's respuesta es la más cercana para el uso de la vida real de hoy, pero como Christoph
sugiere solución más completa, una ligera corrección a su respuesta sería la respuesta completa, sólo tiene que añadir volatile
a la declaración de la Unión: static const volatile union
.
Esto aseguraría el almacenamiento y la lectura de la memoria, que es necesaria para determinar la endianidad.