Trong C ta có hai khả năng để khai báo cấu trúc:
struct STRUCT_NAME {} ;
hoặc
typedef struct {} STRUCT_ALIAS;
Nếu bạn sử dụng phương pháp đầu tiên (cho struct một tên) - bạn phải xác định biến bằng cách đánh dấu nó một cách rõ ràng là a struct
:
struct STRUCT_NAME myStruct;
Tuy nhiên nếu bạn sử dụng phương pháp thứ hai (cung cấp cấu trúc s) sau đó bạn có thể bỏ qua struct
định - trình biên dịch có thể suy ra loại biến chỉ cho nó alias
:
STRUCT_ALIAS myStruct;
thưởng điểm: Bạn có thể khai báo struct với cả hai đó là tên và bí danh:
typedef struct STRUCT_TAG {} STRUCT_TAG;
// here STRUCT_NAME == STRUCT_ALIAS
Sau đó, trong định nghĩa biến, bạn có thể sử dụng phương thức đầu tiên hoặc thứ hai. Tại sao cả hai thế giới đều tốt? Bí danh cấu trúc cho phép bạn tạo các định nghĩa biến cấu trúc ngắn hơn - đôi khi là một điều tốt. Nhưng tên cấu trúc cho phép bạn tạo forward declarations
. Đó là công cụ không thể thiếu trong một số trường hợp - cân nhắc bạn có tham chiếu vòng tròn giữa cấu trúc:
struct A {
struct B * b;
}
struct B {
struct A * a;
}
Bên cạnh đó kiến trúc này có thể có những thiếu sót - nét tròn này sẽ biên dịch khi cấu trúc được khai báo trong cách đầu tiên (với tên) VÀ struct con trỏ được tham chiếu rõ ràng bằng cách đánh dấu chúng là struct
.
Nguồn
2012-04-30 16:14:01
Bạn đang trộn C và C++ với nhau ở đây? –
Đảm bảo bạn đang nhập tiêu đề: 'import" datasetup.h "'. – piperchester