Harap perhatikan bahwa sebagian besar jawaban di sini tidak portabel, karena penyusun hari ini akan mengevaluasi jawaban tersebut dalam waktu kompilasi (bergantung pada pengoptimalan) dan mengembalikan nilai tertentu berdasarkan endian tertentu, sedangkan endian mesin yang sebenarnya dapat berbeda. Nilai di mana endianness diuji, tidak akan pernah mencapai memori sistem sehingga kode yang dijalankan sebenarnya akan mengembalikan hasil yang sama terlepas dari endian yang sebenarnya.
untuk contoh , di ARM Cortex-M3 endianness diimplementasikan akan mencerminkan dalam AIRCR.ENDIANNESS Status bit dan compiler tidak dapat mengetahui nilai ini dalam waktu kompilasi.
Hasil kompilasi untuk beberapa jawaban yang disarankan di sini:
https://godbolt.org/z/GJGNE2 untuk jawaban ini ,
https://godbolt.org/z/Yv-pyJ untuk ini jawaban , dan seterusnya.
Untuk mengatasinya, Anda harus menggunakan volatile
kualifikasi. Yogeesh H T
Jawabannya 's adalah yang paling dekat untuk penggunaan kehidupan nyata saat ini, tapi karena Christoph
menyarankan solusi yang lebih komprehensif, memperbaiki sedikit untuk itu jawabannya akan membuat jawabannya lengkap, hanya menambahkan volatile
untuk deklarasi union: static const volatile union
.
Ini akan memastikan penyimpanan dan pembacaan dari memori, yang diperlukan untuk menentukan ketangguhan.