结构体位对齐的问题
GCC编译器中定义如下:
struct iec_i {
u_char ft :1;
u_short ns :15;
u_char res :1;
u_short nr :15;
}__attribute__((__packed__));
struct iec_s {
u_char ft :1;
u_short res1 :15;
u_char res2 :1;
u_short nr :15;
}__attribute__((__packed__));
struct iec_u {
u_char ft :2;
u_char start_act :1;
u_char start_con :1;
u_char stop_act :1;
u_char stop_con :1;
u_char test_act :1;
u_char test_con :1;
u_char res1;
u_short res2;
}__attribute__((__packed__));
struct iechdr {
u_char start;
u_char length;
u_char raw[0];
union {
struct iec_i ic;
struct iec_s sc;
struct iec_u uc;
}fc;
}__attribute__((__packed__));
得出:
sizeof(struct iec_i)=4
sizeof(struct iec_u)=4
sizeof(struct iec_s)=4
sizeof(struct iechdr)=6
移植到BCB
#pragma pack(1)
struct iec_i {
u_char ft :1;
u_short ns :15;
u_char res :1;
u_short nr :15;
};
struct iec_s {
u_char ft :1;
u_short res1 :15;
u_char res2 :1;
u_short nr :15;
};
struct iec_u {
u_char ft :2;
u_char start_act :1;
u_char start_con :1;
u_char stop_act :1;
u_char stop_con :1;
u_char test_act :1;
u_char test_con :1;
u_char res1;
u_short res2;
};
struct iechdr {
u_char start;
u_char length;
u_char raw[0];
union {
struct iec_i ic;
struct iec_s sc;
struct iec_u uc;
}fc;
};
得出:
sizeof(struct iec_i)=6
sizeof(struct iec_u)=4
sizeof(struct iec_s)=6
sizeof(struct iechdr)=8
怎样才能做到跟GCC里一样的效果?