Tôi có tuyên bố sau đây trong một tập tin tiêu đề:typedef có hiệu ứng phụ khai báo chuyển tiếp?
struct my_struct;
int func(struct my_struct* s); // Passing struct my_struct*
Nếu không có tờ khai chuyển tiếp, trình biên dịch sẽ rõ ràng cho this error:
error: 'struct my_struct' declared inside parameter list
Tuy nhiên, nếu tôi thay thế khai báo chuyển tiếp my_struct
bằng typedef và cập nhật khai báo hàm cho phù hợp, nó compiles fine:
typedef struct my_struct my_struct_t;
int func(mystruct_t* s); // Passing my_struct_t*
Tò mò, nếu tôi giữ typedef, nhưng sử dụng tờ khai ban đầu my_struct
, nó also compiles:
typedef struct my_struct my_struct_t;
int func(struct my_struct* s); // Passing struct my_struct*
Có ai khác nhận thấy rằng? Hành vi đó có phải là một tác dụng phụ không?
Máy đánh chữ cũng hoạt động như một tờ khai chuyển tiếp, nó mang tên kiểu vào phạm vi. –
@DanielFischer Có, tôi đã nhận thấy rằng :) nhưng tôi không thể tìm thấy bất cứ điều gì trong tiêu chuẩn nêu rõ điều đó. Tôi đã bỏ lỡ một cái gì đó? –
Không cần khai báo chuyển tiếp để tạo một con trỏ tới một cấu trúc. Nó chỉ là một quy ước. Liệu tôi có sai? –