Về cách khai báo một union cũng giống như khai báo một struct. Nó chỉ khác nhau là: Các thành phần của Struct được cấp phát các vùng nhớ riêng và độ dài của struct bằng tổng độ dài của các "biến" thành phần. Còn union thì các thành phần được cấp phát bắt đầu từ ô nhớ đầu tiên(có nghĩa là địa chỉ bắt đầu của các thành phần trong union là như nhau).
Về 2 ví dụ trên của bạn, mình cũng chưa thử hết các kiểu khai báo xem các compiler cho avr phản ứng lại thế nào? Nhưng trong AVR Studio và CodeVisionAVR có sự khác nhau đáng kể. Trong AVR Studio thì chấp nhận union có thể được khai báo trong Struct còn trong CodeVisionAVR thì không.
Còn lỗi khi bạn dùng cách 1 để khai báo một biến union kiểu split16to8 là do bạn chưa có tên Union. split16to8 trong khai báo typedef union split16to8 theo C chuẩn thì nó không phải là tên cấu trúc, nó có thể có hoặc không. mà tên cấu trúc phải được thiết lập sau dấu ;. Về cái này bạn đọc trong trang 244 trong cuốn: Kỹ thuật lập trình C của Thầy Phạm Văn Ất.. Cách khai báo một struct hoặc union chuẩn như sau:
- Cách Định nghĩa một kiểu union hoặc Struct:
Sau các định nghĩa này có thể dùng nó để khai báo các biến Union hoặc struct.
- Cách Khai báo một biến union hoặc một struct
Về 2 ví dụ trên của bạn, mình cũng chưa thử hết các kiểu khai báo xem các compiler cho avr phản ứng lại thế nào? Nhưng trong AVR Studio và CodeVisionAVR có sự khác nhau đáng kể. Trong AVR Studio thì chấp nhận union có thể được khai báo trong Struct còn trong CodeVisionAVR thì không.
Còn lỗi khi bạn dùng cách 1 để khai báo một biến union kiểu split16to8 là do bạn chưa có tên Union. split16to8 trong khai báo typedef union split16to8 theo C chuẩn thì nó không phải là tên cấu trúc, nó có thể có hoặc không. mà tên cấu trúc phải được thiết lập sau dấu ;. Về cái này bạn đọc trong trang 244 trong cuốn: Kỹ thuật lập trình C của Thầy Phạm Văn Ất.. Cách khai báo một struct hoặc union chuẩn như sau:
- Cách Định nghĩa một kiểu union hoặc Struct:
typedef union
{
//cac thanh phan cua union
}ten_union;
typedef struct
{
//cac thanh phan cua struct
}ten_struct;
{
//cac thanh phan cua union
}ten_union;
typedef struct
{
//cac thanh phan cua struct
}ten_struct;
- Cách Khai báo một biến union hoặc một struct
union ten_union
{
//các thành phần của union
}
struct ten_struct
{
//các thành phần của struct
}
{
//các thành phần của union
}
struct ten_struct
{
//các thành phần của struct
}
Comment