在 c 語言中,可以在結構體中宣告某個聯合體(或結構體)而不用指出它的名字,如此之後就可以像使用結構體成員一樣直接使用其中聯合體(或結構體)的成員。
#include struct person
; };
int main(void)
}; printf("%d\n", jim.area_code);
}
如果不使用匿名結構體,則上述例子對應的**如下:
#include struct phone;
struct person
;
int main(void) };
printf("%d\n", jim.office.area_code);
}
對比上述兩個例子可以看出:
使用匿名結構體,結構體物件 jim 可以通過 jim.area_code 直接訪問匿名結構體成員變數 area_code,**相對比較簡潔
反之則必須通過 jim.office.area_code 來訪問結構體成員變數
匿名聯合體舉例如下:
#include struct person
; int age;};
int main(void);
printf("jim.gender = %c, jim.id = %d\n", jim.gender, jim.id);
return 0;
}
如果不適用匿名聯合體,那麼程式如下:
#include union u;
struct person;
int main(void);
printf("jim.test.gender = %c, jim.test.id = %d\n", jim.test.gender, jim.test.id);
return 0;
}
————————————————
keil也支援匿名結構體、聯合體
#pragma anon_unions
typedef union ;
}kktypedef;
void jjj(void)
//keil中預設是不支援匿名結構體的,需要編譯指令#pragma anon_unions指名。
但是不支援這樣的匿名結構體
#pragma anon_unions
union ;};
void jjj(void)
error: #20: identifier "num" is undefined
error: #20: identifier "nlow" is undefined
但在iar裡是可以的,有點不一樣。
補充:好像在gcc編譯器中也是可以的。
補充2:在ccs v5.1中使用msp430中不能使用以上兩個結構體,不知道在ccs v5.1中msp430的編譯器是什麼,反正是不支援匿名結構體。
————————————————
匿名聯合體的 妙處
在類內部其實是可以定義一些型別的,比如struct union class,其實也就只有這三類可以被定義,也只有這三類可以定義它們各自的物件,然後 出來或者 出來,c 中只有這三類了。對於它們各自來說,在乙個類的內部都可以有三種方式來定義它們,比如對於union,第一種方式 定義了乙個union型別...
C語言中的聯合體
聯 合 union 1.聯合說明和聯合變數定義 聯合也是一種新的資料型別,它是一種特殊形式的變數。聯合說明和聯合變數定義與結構十分相似。其形式為 union 聯合名 聯合變數名 聯合表示幾個變數公用乙個記憶體位置,在不同的時間儲存不同的資料型別 和不同長度的變數。下例表示說明乙個聯合a bc uni...
C語言中的聯合體union
在c c 程式的編寫中,當多個基本資料型別或復合資料結構要占用同一片記憶體時,我們要使用聯合體 當多種型別,多個物件,多個事物只取其一時 我們姑且通俗地稱其為 n 選1 我們也 可以使用聯合體來發揮其長處。首先看一段 union myun u int k a int main union型別是共享記...