Tôi biết trong hai cách có thể để xác định và sử dụng struct
s:viết code struct mà làm việc cả trong C và C++
#1
struct person
{
char name[32];
int age;
};
struct person dmr = {"Dennis Ritchie", 70};
#2
typedef struct
{
char name[32];
int age;
} person;
person dmr = {"Dennis Ritchie", 70};
Thuộc tính thú vị của cách đầu tiên là cả hai loại và biến có thể có cùng tên:
struct person person = {"Sam Persson", 50};
Đó có phải là thành ngữ trong C? Nó có được đảm bảo hoạt động trong C++ không? Hoặc có những trường hợp góc tôi nên biết?
Lưu ý rằng tôi không quan tâm đến câu trả lời C++ thuần túy (ví dụ: "sử dụng std::string
thay vì char[32]
"). Đây là câu hỏi về khả năng tương thích C/C++.
Tôi sẽ không gọi đó là "tài sản thú vị" mà nó là tài sản che khuất. Tốt nhất là giữ tên kiểu bắt đầu từ chữ hoa - để phân biệt tên và tên biến. –
Tôi đã đánh dấu điều này là trùng lặp với [typedef struct vs struct definitions] (http://stackoverflow.com/questions/1675351/typedef-struct-vs-struct-definitions). Về mặt kỹ thuật bạn có thể xem xét nó không phải là (câu hỏi khác chỉ giao dịch với C) nhưng ngữ nghĩa giống nhau trong C++ với sự khác biệt duy nhất mà tra cứu cũng sẽ tìm thấy các ký hiệu trong không gian định danh do người dùng xác định nếu nó không tìm thấy chúng trong không gian nhận dạng toàn cầu. Điều đó cũng được xử lý trong câu trả lời được chấp nhận (có chứa các bit của c + +) –
Ngoài ra, chúng không ** hai cách định nghĩa 'struct', có một cách xác định' struct' (có thể có hoặc không phải là một tên), và có 'typedef' (có thể được áp dụng cho một loại có tên hoặc chưa đặt tên), nhưng chúng không phải là hai cách để định nghĩa một 'struct' ở bất kỳ mức nào. Và bạn đang thiếu 3), kết hợp cả hai: 'typedef struct type {} type;' cho giá trị của nó (đó là cách thức thành ngữ C) –