Xin giải thích như thế nào đoạn mã sau đây trong C là một hợp lệ một trongbị xáo trộn Mã trong C
int main(c, v) char *v; int c;{
//program body
}
tôi stumbled trên một số ví dụ từ cuộc thi đang bị xáo trộn International C và tôi chỉ tò mò.
Xin giải thích như thế nào đoạn mã sau đây trong C là một hợp lệ một trongbị xáo trộn Mã trong C
int main(c, v) char *v; int c;{
//program body
}
tôi stumbled trên một số ví dụ từ cuộc thi đang bị xáo trộn International C và tôi chỉ tò mò.
Đó là khai báo chức năng kiểu K&R. Xem Function declaration: K&R vs ANSI
Tuy nhiên, tôi không tin rằng nó có chữ ký hợp lệ cho main()
, vì v
không phải là loại phù hợp. Xem What are the valid signatures for C's main() function?
Đây là kiểu khai báo hàm trước ANSI, nếu bạn đang đề cập đến lý do tại sao char * v; int; nằm ngoài dấu ngoặc đơn.
Đây là "K & R C", trong đó đối số hàm được khai báo giữa phần cuối danh sách đối số và phần đầu của hàm của hàm.
Đó chỉ là định nghĩa hàm R-style K & R, mặc dù được đánh dấu là "lỗi thời", vẫn được phép theo tiêu chuẩn. Điều không tốt trong mã đó là tham số đầu tiên phải là char **v
(hoặc char *v[]
) là tiêu chuẩn.
Tham khảo câu hỏi này: http://stackoverflow.com/questions/8869768/defining-the-functions-argument-type-after-the-is-it-a-very-old-standard –