union 的成員本身就被存放在相同的內存空間(共享內存,正是union 發揮作用、做貢獻的去處),因此,我們可以將一個CHAR/BYTE 數據和一個整型數據同時作爲一個union 的成員,得出如下答案:
int checkCPU()
{
{
union w
{
int a;
char b;
} c;
c.a = 1;
return (c.b == 1);
}
}
實現同樣的功能,我們來看看Linux 操作系統中相關的源代碼是怎麼做的:
static union { char c[4]; unsigned long mylong; } endian_test = {{ ‘l’, ‘?’, ‘?’, ‘b’ } };
#define ENDIANNESS ((char)endian_test.mylong)
Linux 的內核作者們僅僅用一個union 變量和一個簡單的宏定義就實現了一大段代碼同樣的功能!由以上一段代碼我們可以深刻領會到Linux 源代碼的精妙之處!(如果ENDIANNESS=’l’表示系統爲little endian,
爲’b’表示big endian )