Chúng ta đều biết làm thế nào để khai báo một cấu trúc trong C:Khai báo cấu trúc: typedef struct name name;
struct Label1{ /* variables */ } Label2; // As I learned
Nhưng tôi muốn biết tại sao mã này hoạt động mà không tuyên bố 'tên struct':
typedef struct name s_name;
Hoặc là trong thực tế, không gõ mã số
struct name;
có nghĩa là tôi đã tuyên bố 'tên cấu trúc' là cấu trúc khoảng trống hoặc một cái gì đó như thế này?
Ví dụ mã:
typedef struct Data Data;
struct Data{ /*variables*/ };
Nếu trong lần đầu tiên dữ liệu dòng struct được khai báo là một khoảng trống một, sau đó trong lần thứ hai nó giống như tôi đang redeclaring nó với các thành viên.
Giải thích cho điểm này là gì?
cấu trúc C được danh nghĩa đánh máy, tức là loại sắc trong một đơn vị dịch được xác định bởi tên; 'struct name' là đủ để khai báo một kiểu mới, nhưng kiểu sẽ không đầy đủ cho đến khi một khai báo hoàn chỉnh khác (aka definition) được gặp; bạn có thể có con trỏ đến các đối tượng với kiểu không đầy đủ, nhưng rõ ràng là sẽ không thể truy cập các thành viên hoặc sử dụng nó để khai báo các biến; tờ khai loại không đầy đủ còn được gọi là tờ khai chuyển tiếp; một trong những ứng dụng của nó là các con trỏ mờ đục – Christoph
@ Michael Heidelberg "Chúng ta đều biết cách khai báo một cấu trúc trong C" - sau câu hỏi của bạn, tôi không chắc rằng nó là đúng. :) –