typedef int A;
typedef int B;
void foo(A arg){}
void main(void){
B wrongvar = 7;
foo(wrongvar);
}
Cấu trúc này có phải trả lại cảnh báo/lỗi theo tiêu chuẩn không? Điều gì về các trình biên dịch phổ biến nhất?Sử dụng 'typedef' để đảm bảo an toàn loại hợp lý
Ví dụ: chúng tôi có các biến, đại diện cho kilogram và mét và tất cả đều là loại 'int'. Chúng tôi có một chức năng, xử lý mét. Chúng tôi muốn trình biên dịch bắt lỗi, liên quan đến việc chuyển các kilogram có nghĩa là biến biến thành hàm đó.
Tôi tin rằng Ada sẽ xử lý thuận lợi. Điều gì về hiện đại C?
A 'typedef' đưa ra một mới tên cho một loại hiện có; nó không tạo ra một kiểu mới. Các tên thay thế cũng tham chiếu đến cùng một loại. Vì vậy, tất cả 'A',' B', 'int' và' signed int' có thể được chuyển tới 'foo (A arg)' mà không có sự vi phạm kiểu (và các kiểu khác chuyển thành 'int', chẳng hạn như' enum' các loại, cũng có thể được thông qua mà không gợi ra cảnh báo). –
'void main (void)' nên là 'int main (void)' - và bất kỳ tham chiếu nào đã nói với bạn sử dụng 'void main (void)' được viết bởi một người không biết C rất tốt. –
@KeithThompson, c99 dường như [hỗ trợ] (http://stackoverflow.com/a/9356660/1145760) việc sử dụng này của 'void main (void)'. Sự hiểu lầm là vì tôi đã không gắn thẻ câu hỏi một cách chính xác. – Vorac