19
如果我有一個聯合,C標準保證聯合本身將對齊到最大元素的大小。聯合元素對齊
union U {
long l;
int i;
short s;
char c[2];
} u;
但它說什麼關於工會內部的各個工會元件排列?以下表達保證是真實的嗎?
(&u.l == &u.i) && (&u.i == &u.s) && (&u.s == &u.c[0])
如果我有一個聯合,C標準保證聯合本身將對齊到最大元素的大小。聯合元素對齊
union U {
long l;
int i;
short s;
char c[2];
} u;
但它說什麼關於工會內部的各個工會元件排列?以下表達保證是真實的嗎?
(&u.l == &u.i) && (&u.i == &u.s) && (&u.s == &u.c[0])
的各元素的開始與聯合本身的地址對齊。
因此,您要求的表達式中的個別比較是真實的,但除非聯合位於地址0x0001處,否則整個表達式是錯誤的。
應用於以下比較刪除的文本:
&u.l == &u.i == &u.s == &u.c[0]
修訂版本進行比較不同的指針類型 - 指針應被轉換爲空指針。
我被要求引用標準 - 或標識標準的部分。
C99 - 部分6.7.2.1結構和聯合說明符(第14段):
一個指向聯合對象,適當地轉換,指向每個成員(或如果一個件是一個位域,然後到它所在的單位),反之亦然。
可以你參考標準的相關部分嗎? – 2009-05-21 05:19:45
提醒記住標準不會說'u.i&0xFF == uc [0]`或i的低位字節不能保證是c [0](字節順序) – Spudd86 2010-06-17 15:55:18