Por favor, preste atenção que a maioria das respostas aqui não são portáveis, uma vez que os compiladores atuais irão avaliar essas respostas em tempo de compilação (depende da otimização) e retornar um valor específico baseado em um endianness específico, enquanto o endianness real da máquina pode ser diferente. Os valores nos quais o endianness é testado, nunca chegarão à memória do sistema, portanto, o código real executado retornará o mesmo resultado, independentemente do endianness real.
Por exemplo , em ARM Cortex-M3, o endianness implementado refletirá em um bit de status AIRCR.ENDIANNESS e o compilador não pode saber esse valor em tempo de compilação.
Resultado da compilação para algumas das respostas sugeridas aqui:
https://godbolt.org/z/GJGNE2 para esta resposta,
https://godbolt.org/z/Yv-pyJ para isso resposta e assim por diante.
Para resolvê-lo, você precisará usar o volatile
qualificador. Yogeesh H T
's resposta é a mais próxima para o uso da vida real de hoje, mas desde que Christoph
sugere solução mais abrangente, uma ligeira correção para a sua resposta faria a resposta completa, basta adicionar volatile
à declaração da União: static const volatile union
.
Isso garantiria o armazenamento e a leitura da memória, necessários para determinar o endianismo.